Bug 445404 - Crash during attempted folder import
Summary: Crash during attempted folder import
Status: RESOLVED FIXED
Alias: None
Product: kphotoalbum
Classification: Applications
Component: general (show other bugs)
Version: 5.8.1
Platform: Neon Linux
: NOR crash
Target Milestone: ---
Assignee: KPhotoAlbum Bugs
URL:
Keywords: drkonqi
Depends on:
Blocks:
 
Reported: 2021-11-12 22:34 UTC by John Pearson
Modified: 2021-12-08 02:23 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description John Pearson 2021-11-12 22:34:51 UTC
Application: kphotoalbum (5.8.1)

Qt Version: 5.15.3
Frameworks Version: 5.87.0
Operating System: Linux 5.11.0-40-generic x86_64
Windowing System: X11
Distribution: KDE neon User - Plasma 25th Anniversary Edition
DrKonqi: 5.23.3 [KCrashBackend]

-- Information about the crash:
- What I was doing when the application crashed:
I attempted to use the file import dialog to import a folder into a new data base with kphotoalbum. it did not work.  So I copied the folder into the correct position.  kphotoalbum found the images files and added them.  I saved the data base.  I then attempted to use the file import dialog to update the information, deselecting the image copy dialog.  the result is the reported crash.

The reporter is unsure if this crash is reproducible.

-- Backtrace:
Application: KPhotoAlbum (kphotoalbum), signal: Segmentation fault

[New LWP 69650]
[New LWP 69651]
[New LWP 69652]
[New LWP 69653]
[New LWP 69654]
[New LWP 69655]
[New LWP 69659]
[New LWP 69660]
[New LWP 69661]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007f5196838aff in __GI___poll (fds=0x7ffe0902fd38, nfds=1, timeout=1000) at ../sysdeps/unix/sysv/linux/poll.c:29
__preamble__
[Current thread is 1 (Thread 0x7f5192733a40 (LWP 69649))]

Thread 10 (Thread 0x7f5163bfb700 (LWP 69661)):
#0  futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x55bd045b7a90) at ../sysdeps/nptl/futex-internal.h:183
#1  __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x55bd045b7a40, cond=0x55bd045b7a68) at pthread_cond_wait.c:508
#2  __pthread_cond_wait (cond=0x55bd045b7a68, mutex=0x55bd045b7a40) at pthread_cond_wait.c:647
#3  0x00007f5196d375cb in QWaitConditionPrivate::wait (deadline=..., this=0x55bd045b7a40) at thread/qwaitcondition_unix.cpp:146
#4  QWaitCondition::wait (this=this@entry=0x55bd045a2698, mutex=mutex@entry=0x55bd045a26a0, deadline=...) at thread/qwaitcondition_unix.cpp:225
#5  0x000055bd039b8557 in ImageManager::AsyncLoader::next (this=0x55bd045a2670) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qdeadlinetimer.h:68
#6  0x000055bd039b7c46 in ImageManager::ImageLoaderThread::run (this=0x55bd045a3340) at ./ImageManager/ImageLoaderThread.cpp:44
#7  0x00007f5196d3145c in QThreadPrivate::start (arg=0x55bd045a3340) at thread/qthread_unix.cpp:329
#8  0x00007f5195d53609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#9  0x00007f5196845293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 9 (Thread 0x7f51657fd700 (LWP 69660)):
#0  futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x55bd045b7a90) at ../sysdeps/nptl/futex-internal.h:183
#1  __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x55bd045b7a40, cond=0x55bd045b7a68) at pthread_cond_wait.c:508
#2  __pthread_cond_wait (cond=0x55bd045b7a68, mutex=0x55bd045b7a40) at pthread_cond_wait.c:647
#3  0x00007f5196d375cb in QWaitConditionPrivate::wait (deadline=..., this=0x55bd045b7a40) at thread/qwaitcondition_unix.cpp:146
#4  QWaitCondition::wait (this=this@entry=0x55bd045a2698, mutex=mutex@entry=0x55bd045a26a0, deadline=...) at thread/qwaitcondition_unix.cpp:225
#5  0x000055bd039b8557 in ImageManager::AsyncLoader::next (this=0x55bd045a2670) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qdeadlinetimer.h:68
#6  0x000055bd039b7c46 in ImageManager::ImageLoaderThread::run (this=0x55bd045c3070) at ./ImageManager/ImageLoaderThread.cpp:44
#7  0x00007f5196d3145c in QThreadPrivate::start (arg=0x55bd045c3070) at thread/qthread_unix.cpp:329
#8  0x00007f5195d53609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#9  0x00007f5196845293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 8 (Thread 0x7f517ce9f700 (LWP 69659)):
#0  futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x55bd045b7a94) at ../sysdeps/nptl/futex-internal.h:183
#1  __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x55bd045b7a40, cond=0x55bd045b7a68) at pthread_cond_wait.c:508
#2  __pthread_cond_wait (cond=0x55bd045b7a68, mutex=0x55bd045b7a40) at pthread_cond_wait.c:647
#3  0x00007f5196d375cb in QWaitConditionPrivate::wait (deadline=..., this=0x55bd045b7a40) at thread/qwaitcondition_unix.cpp:146
#4  QWaitCondition::wait (this=this@entry=0x55bd045a2698, mutex=mutex@entry=0x55bd045a26a0, deadline=...) at thread/qwaitcondition_unix.cpp:225
#5  0x000055bd039b8557 in ImageManager::AsyncLoader::next (this=0x55bd045a2670) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qdeadlinetimer.h:68
#6  0x000055bd039b7c46 in ImageManager::ImageLoaderThread::run (this=0x55bd045c2f30) at ./ImageManager/ImageLoaderThread.cpp:44
#7  0x00007f5196d3145c in QThreadPrivate::start (arg=0x55bd045c2f30) at thread/qthread_unix.cpp:329
#8  0x00007f5195d53609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#9  0x00007f5196845293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 7 (Thread 0x7f517d847700 (LWP 69655)):
#0  futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x55bd041b47f8) at ../sysdeps/nptl/futex-internal.h:183
#1  __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x55bd041b47a8, cond=0x55bd041b47d0) at pthread_cond_wait.c:508
#2  __pthread_cond_wait (cond=0x55bd041b47d0, mutex=0x55bd041b47a8) at pthread_cond_wait.c:647
#3  0x00007f5188dc6e7b in ?? () from /usr/lib/x86_64-linux-gnu/dri/iris_dri.so
#4  0x00007f5188dc6a7b in ?? () from /usr/lib/x86_64-linux-gnu/dri/iris_dri.so
#5  0x00007f5195d53609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#6  0x00007f5196845293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 6 (Thread 0x7f517e048700 (LWP 69654)):
#0  futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x55bd041b47f8) at ../sysdeps/nptl/futex-internal.h:183
#1  __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x55bd041b47a8, cond=0x55bd041b47d0) at pthread_cond_wait.c:508
#2  __pthread_cond_wait (cond=0x55bd041b47d0, mutex=0x55bd041b47a8) at pthread_cond_wait.c:647
#3  0x00007f5188dc6e7b in ?? () from /usr/lib/x86_64-linux-gnu/dri/iris_dri.so
#4  0x00007f5188dc6a7b in ?? () from /usr/lib/x86_64-linux-gnu/dri/iris_dri.so
#5  0x00007f5195d53609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#6  0x00007f5196845293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 5 (Thread 0x7f517e849700 (LWP 69653)):
#0  futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x55bd041b47f8) at ../sysdeps/nptl/futex-internal.h:183
#1  __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x55bd041b47a8, cond=0x55bd041b47d0) at pthread_cond_wait.c:508
#2  __pthread_cond_wait (cond=0x55bd041b47d0, mutex=0x55bd041b47a8) at pthread_cond_wait.c:647
#3  0x00007f5188dc6e7b in ?? () from /usr/lib/x86_64-linux-gnu/dri/iris_dri.so
#4  0x00007f5188dc6a7b in ?? () from /usr/lib/x86_64-linux-gnu/dri/iris_dri.so
#5  0x00007f5195d53609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#6  0x00007f5196845293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 4 (Thread 0x7f5188a0e700 (LWP 69652)):
#0  futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x55bd041b47f8) at ../sysdeps/nptl/futex-internal.h:183
#1  __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0x55bd041b47a8, cond=0x55bd041b47d0) at pthread_cond_wait.c:508
#2  __pthread_cond_wait (cond=0x55bd041b47d0, mutex=0x55bd041b47a8) at pthread_cond_wait.c:647
#3  0x00007f5188dc6e7b in ?? () from /usr/lib/x86_64-linux-gnu/dri/iris_dri.so
#4  0x00007f5188dc6a7b in ?? () from /usr/lib/x86_64-linux-gnu/dri/iris_dri.so
#5  0x00007f5195d53609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#6  0x00007f5196845293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 3 (Thread 0x7f518bfff700 (LWP 69651)):
#0  __GI___libc_read (nbytes=16, buf=0x7f518bffe920, fd=7) at ../sysdeps/unix/sysv/linux/read.c:26
#1  __GI___libc_read (fd=7, buf=0x7f518bffe920, nbytes=16) at ../sysdeps/unix/sysv/linux/read.c:24
#2  0x00007f5195158b2f in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f519510febe in g_main_context_check () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#4  0x00007f5195110312 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#5  0x00007f51951104a3 in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#6  0x00007f5196f7261b in QEventDispatcherGlib::processEvents (this=0x7f5184000b60, flags=...) at kernel/qeventdispatcher_glib.cpp:425
#7  0x00007f5196f168ab in QEventLoop::exec (this=this@entry=0x7f518bffeb30, flags=..., flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:141
#8  0x00007f5196d302c2 in QThread::exec (this=<optimized out>) at ../../include/QtCore/../../src/corelib/global/qflags.h:121
#9  0x00007f5197f4bf4b in ?? () from /lib/x86_64-linux-gnu/libQt5DBus.so.5
#10 0x00007f5196d3145c in QThreadPrivate::start (arg=0x7f5197fcfd80) at thread/qthread_unix.cpp:329
#11 0x00007f5195d53609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#12 0x00007f5196845293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 2 (Thread 0x7f519193a700 (LWP 69650)):
#0  0x00007f5196838aff in __GI___poll (fds=0x7f5191939a68, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f5194f33c1a in ?? () from /lib/x86_64-linux-gnu/libxcb.so.1
#2  0x00007f5194f3590a in xcb_wait_for_event () from /lib/x86_64-linux-gnu/libxcb.so.1
#3  0x00007f5192083e88 in QXcbEventQueue::run (this=0x55bd03e2fb20) at qxcbeventqueue.cpp:228
#4  0x00007f5196d3145c in QThreadPrivate::start (arg=0x55bd03e2fb20) at thread/qthread_unix.cpp:329
#5  0x00007f5195d53609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#6  0x00007f5196845293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 1 (Thread 0x7f5192733a40 (LWP 69649)):
[KCrash Handler]
#4  std::__atomic_base<int>::operator++ (this=0x20) at /usr/include/c++/9/bits/atomic_base.h:318
#5  QAtomicOps<int>::ref<int> (_q_value=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qatomic_cxx11.h:283
#6  QBasicAtomicInteger<int>::ref (this=0x20) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qbasicatomic.h:118
#7  QExplicitlySharedDataPointer<DB::ImageInfo>::QExplicitlySharedDataPointer (o=..., this=0x7ffe09030ac8) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qshareddata.h:187
#8  ImportExport::ImportHandler::copyNextFromExternal (this=0x7ffe09030d30) at ./ImportExport/ImportHandler.cpp:95
#9  0x000055bd03a1b24e in ImportExport::ImportHandler::copyFromExternal (this=0x7ffe09030d30) at ./ImportExport/ImportHandler.cpp:90
#10 0x000055bd03a1c234 in ImportExport::ImportHandler::exec (this=this@entry=0x7ffe09030d30, settings=..., kimFileReader=kimFileReader@entry=0x7ffe09030cd0) at ./ImportExport/ImportHandler.cpp:61
#11 0x000055bd03a0da1b in ImportExport::Import::exec (this=0x7f518c009810, fileName=...) at ./ImportExport/Import.cpp:92
#12 0x000055bd03a0db06 in ImportExport::Import::imageImport (url=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qflags.h:121
#13 0x000055bd03a0dce9 in ImportExport::Import::imageImport () at ./ImportExport/Import.cpp:33
#14 0x00007f5196f4edce in QtPrivate::QSlotObjectBase::call (a=0x7ffe09031070, r=0x55bd03f10000, this=0x55bd043a8100) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#15 doActivate<false> (sender=0x55bd043a7fc0, signal_index=4, argv=0x7ffe09031070) at kernel/qobject.cpp:3886
#16 0x00007f5196f48197 in QMetaObject::activate (sender=sender@entry=0x55bd043a7fc0, m=m@entry=0x7f5197f031c0 <QAction::staticMetaObject>, local_signal_index=local_signal_index@entry=1, argv=argv@entry=0x7ffe09031070) at kernel/qobject.cpp:3946
#17 0x00007f51979eb8e6 in QAction::triggered (this=this@entry=0x55bd043a7fc0, _t1=<optimized out>) at .moc/moc_qaction.cpp:376
#18 0x00007f51979edfb8 in QAction::activate (this=0x55bd043a7fc0, event=<optimized out>) at kernel/qaction.cpp:1161
#19 0x00007f5197b788c2 in QMenuPrivate::activateCausedStack (this=this@entry=0x55bd044a7990, causedStack=..., action=action@entry=0x55bd043a7fc0, action_e=action_e@entry=QAction::Trigger, self=self@entry=true) at widgets/qmenu.cpp:1384
#20 0x00007f5197b8000e in QMenuPrivate::activateAction (this=this@entry=0x55bd044a7990, action=action@entry=0x55bd043a7fc0, action_e=action_e@entry=QAction::Trigger, self=self@entry=true) at widgets/qmenu.cpp:1461
#21 0x00007f5197b812a2 in QMenu::mouseReleaseEvent (this=0x55bd044953f0, e=0x7ffe09031750) at widgets/qmenu.cpp:2967
#22 0x00007f5197a34cf6 in QWidget::event (this=this@entry=0x55bd044953f0, event=event@entry=0x7ffe09031750) at kernel/qwidget.cpp:8664
#23 0x00007f5197b838ab in QMenu::event (this=0x55bd044953f0, e=0x7ffe09031750) at widgets/qmenu.cpp:3089
#24 0x00007f51979f1dc3 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x55bd044953f0, e=0x7ffe09031750) at kernel/qapplication.cpp:3632
#25 0x00007f51979fae77 in QApplication::notify(QObject*, QEvent*) () at kernel/qapplication.cpp:3076
#26 0x00007f5196f17daa in QCoreApplication::notifyInternal2 (receiver=0x55bd044953f0, event=0x7ffe09031750) at ../../include/QtCore/5.15.3/QtCore/private/../../../../../src/corelib/thread/qthread_p.h:325
#27 0x00007f51979fa0a7 in QApplicationPrivate::sendMouseEvent (receiver=0x55bd044953f0, event=event@entry=0x7ffe09031750, alienWidget=0x0, nativeWidget=0x55bd044953f0, buttonDown=<optimized out>, lastMouseReceiver=..., spontaneous=true, onlyDispatchEnterLeave=false) at kernel/qapplication.cpp:2614
#28 0x00007f5197a509de in QWidgetWindow::handleMouseEvent (this=0x7f518c007ba0, event=0x7ffe09031bd0) at /usr/include/c++/9/bits/atomic_base.h:413
#29 0x00007f5197a53264 in QWidgetWindow::event (event=0x7ffe09031bd0, this=0x7f518c007ba0) at kernel/qwidgetwindow.cpp:300
#30 QWidgetWindow::event (this=0x7f518c007ba0, event=0x7ffe09031bd0) at kernel/qwidgetwindow.cpp:239
#31 0x00007f51979f1dc3 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x7f518c007ba0, e=0x7ffe09031bd0) at kernel/qapplication.cpp:3632
#32 0x00007f51979fabb8 in QApplication::notify(QObject*, QEvent*) () at kernel/qapplication.cpp:3156
#33 0x00007f5196f17daa in QCoreApplication::notifyInternal2 (receiver=0x7f518c007ba0, event=0x7ffe09031bd0) at ../../include/QtCore/5.15.3/QtCore/private/../../../../../src/corelib/thread/qthread_p.h:325
#34 0x00007f51972fb4d8 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () at kernel/qguiapplication.cpp:2282
#35 0x00007f51972fcb45 in QGuiApplicationPrivate::processWindowSystemEvent (e=0x55bd046ae780) at kernel/qguiapplication.cpp:2002
#36 0x00007f51972d47ac in QWindowSystemInterface::sendWindowSystemEvents (flags=flags@entry=...) at kernel/qwindowsysteminterface.cpp:1169
#37 0x00007f5192084eae in xcbSourceDispatch (source=<optimized out>) at qxcbeventdispatcher.cpp:105
#38 0x00007f519511017d in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#39 0x00007f5195110400 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#40 0x00007f51951104a3 in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#41 0x00007f5196f7261b in QEventDispatcherGlib::processEvents (this=0x55bd03f0e3d0, flags=...) at kernel/qeventdispatcher_glib.cpp:425
#42 0x00007f5196f168ab in QEventLoop::exec (this=this@entry=0x7ffe09031f70, flags=..., flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:141
#43 0x00007f5196f1ea64 in QCoreApplication::exec () at ../../include/QtCore/../../src/corelib/global/qflags.h:121
#44 0x000055bd038a86ee in main (argc=<optimized out>, argv=<optimized out>) at ./main.cpp:162
[Inferior 1 (process 69649) detached]

Reported using DrKonqi
Comment 1 Johannes Zarl-Zierl 2021-12-07 00:01:17 UTC
Hi John,

Thanks for the crash report!
Upon inspection of the crash backtrace it seems like you deselected the images from the import file and then started the import, leading to the crash...
Can you try if the crash also happens if you select any image before starting the import?

Cheers,
  Johannes
Comment 2 Johannes Zarl-Zierl 2021-12-07 00:12:14 UTC
Git commit 4663fad989c029aba6dbf376911f0532290f7323 by Johannes Zarl-Zierl.
Committed on 07/12/2021 at 00:11.
Pushed by johanneszarl into branch 'master'.

Avoid crashing on import if no image was selected

M  +11   -3    ImportExport/ImportHandler.cpp

https://invent.kde.org/graphics/kphotoalbum/commit/4663fad989c029aba6dbf376911f0532290f7323
Comment 3 John Pearson 2021-12-07 15:29:35 UTC
On Monday, December 6, 2021 7:01:17 PM EST you wrote:
> https://bugs.kde.org/show_bug.cgi?id=445404
> 
> Johannes Zarl-Zierl <johannes@zarl-zierl.at> changed:
> 
>            What    |Removed                     |Added
> ----------------------------------------------------------------------------
> Ever confirmed|0                           |1
>              Status|REPORTED                    |CONFIRMED
>                  CC|                            |johannes@zarl-zierl.at
> 
> --- Comment #1 from Johannes Zarl-Zierl <johannes@zarl-zierl.at> ---
> Hi John,
> 
> Thanks for the crash report!
> Upon inspection of the crash backtrace it seems like you deselected the
> images from the import file and then started the import, leading to the
> crash... Can you try if the crash also happens if you select any image
> before starting the import?

Actually, what happens is that I had forgotten to select images during
export.  So I have a folder with the images and a kim file that is mostly
empty [I openned a terminal and used less to confirm that was the case.]
kpa creates the destination folder and does not move images displaying a
fault message.  This seems consistent behavior.  

My work around consists of the following process:

1.  System level copy of the folder created by export, and all the files
  there in.  Drag and drop in Dolphin works; midnight commander is much more
  efficient.

2.  Select Maintenance/Rescan add the images themselves to the database.

3.  File/import any salvaged image information; it does not matter if I
  deselect the image names during the import dialog.  If there is
  information, then it is added.  If there is no information, there is no
  fault produced.

I am in process of salvaging a database of many thousands of images.  I
upgraded my computer, Ubuntu 18.04 to Ubuntu 20.04, kpa going from 5.3 to
5.8.  20+ years of gathered family photos are what I am trying to salvage. 
I reinstalled Ubuntu 18.04 on the computer; the database works.  Preserving
the folder structure and the database seems to require 1.2K+ select and
export operations, folder by folder, not all of which I perform flawlessly. 
I then boot the computer into Ubuntu 20.04, and import the folders one at a
time.  I could not find a better way.  

This has to be an edge case.  The cause of the fault is forgetting to do a
select all before the export.  The procedure outlined above consistently
overcomes the fault
 
Thank you for the reply,
  John
Comment 4 Johannes Zarl-Zierl 2021-12-07 21:54:35 UTC
Thank you for the detailed response - this confirms that I didn't overlook something. The fix is in master and therefore part of the next release.

As for your problem: depending on the details of your problem, you might get some use out of the "kpa-merge" tool that can be found inside the contrib directory of KPhotoAlbum. While the script is not officially supported and we always recommend backing up your index.xml file before running any tools on it, the script was written by long-time contributor Robert Krawitz and can merge two index.xml files into one...
Comment 5 John Pearson 2021-12-08 02:23:35 UTC
On Tuesday, December 7, 2021 4:54:35 PM EST you wrote:
> https://bugs.kde.org/show_bug.cgi?id=445404
> 
> Johannes Zarl-Zierl <johannes@zarl-zierl.at> changed:
> 
>            What    |Removed                     |Added
> ----------------------------------------------------------------------------
> Latest Commit|                            |4663fad989c029aba6dbf376911
>                    |                            |f0532290f7323
> 
>          Resolution|---                         |FIXED
>              Status|CONFIRMED                   |RESOLVED
> 
> --- Comment #4 from Johannes Zarl-Zierl <johannes@zarl-zierl.at> ---
> Thank you for the detailed response - this confirms that I didn't overlook
> something. The fix is in master and therefore part of the next release.

I did not feel it was more than me ending up with an unusual file[s].  I am
glad I could be of some help.

> As for your problem: depending on the details of your problem, you might get
> some use out of the "kpa-merge" tool that can be found inside the contrib
> directory of KPhotoAlbum. While the script is not officially supported and
> we always recommend backing up your index.xml file before running any tools
> on it, the script was written by long-time contributor Robert Krawitz and
> can merge two index.xml files into one...

'kpa-merge' has not been a good search term; but thanks for the suggestion. 
kphotoalbum is fine tool.


z