Bug 112000 - Crash when overwriting images which are displayed in the thumbnail list
Summary: Crash when overwriting images which are displayed in the thumbnail list
Status: RESOLVED FIXED
Alias: None
Product: digikam
Classification: Applications
Component: Thumbs-Engine (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: Digikam Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-09-03 22:42 UTC by Frank Osterfeld
Modified: 2022-01-21 14:47 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In: 7.6.0


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Frank Osterfeld 2005-09-03 22:42:24 UTC
Using SVN rev. 456843 
 
Steps to reproduce: 
 
1) Select an arbitrary album 
2) open image in image viewer 
3) select "save as" and overwrite another (already existing) image in the 
album 
4) scroll the album view (containing the thumbnails) to the overwritten image 
if it is not already in the visible area. 
5) digikam crashes as soon as thumbnail of the overwritten image is to be 
rendered 
 
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".  
`system-supplied DSO at 0xffffe000' has disappeared; keeping its symbols.  
[Thread debugging using libthread_db enabled]  
[New Thread -1237554624 (LWP 25500)]  
[KCrash handler]  
#4  0xb7e684da in IconGroupItem::iconView ()  
   from /opt2/kde-3.5/lib/libdigikam.so.0  
#5  0xb7e68ee2 in IconItem::repaint () from /opt2/kde-3.5/lib/libdigikam.so.0  
#6  0xb7e82435 in AlbumIconView::slotGotThumbnail ()  
   from /opt2/kde-3.5/lib/libdigikam.so.0  
#7  0xb7e844c4 in AlbumIconView::qt_invoke ()  
   from /opt2/kde-3.5/lib/libdigikam.so.0  
#8  0xb6afa067 in QObject::activate_signal ()  
   from /usr/share/qt3/lib/libqt-mt.so.3  
#9  0xb7ebc09a in PixmapManager::signalPixmap ()  
   from /opt2/kde-3.5/lib/libdigikam.so.0  
#10 0xb7ebbb82 in PixmapManager::slotGotThumbnail ()  
   from /opt2/kde-3.5/lib/libdigikam.so.0  
#11 0xb7ebc154 in PixmapManager::qt_invoke ()  
   from /opt2/kde-3.5/lib/libdigikam.so.0  
#12 0xb6afa067 in QObject::activate_signal ()  
   from /usr/share/qt3/lib/libqt-mt.so.3  
#13 0xb7e60bd4 in ThumbnailJob::signalThumbnail ()  
   from /opt2/kde-3.5/lib/libdigikam.so.0  
#14 0xb7e608d3 in ThumbnailJob::emitThumbnail ()  
   from /opt2/kde-3.5/lib/libdigikam.so.0  
#15 0xb7e6081e in ThumbnailJob::slotThumbData ()  
   from /opt2/kde-3.5/lib/libdigikam.so.0  
#16 0xb7e60d79 in ThumbnailJob::qt_invoke ()  
   from /opt2/kde-3.5/lib/libdigikam.so.0  
#17 0xb6afa067 in QObject::activate_signal ()  
   from /usr/share/qt3/lib/libqt-mt.so.3  
#18 0xb77d3af4 in KIO::TransferJob::data (this=0xbfffe9cc, t0=0x41, t1=@0x41)  
    at jobclasses.moc:993  
#19 0xb77bb853 in KIO::TransferJob::slotData (this=0x85913c8, _data=@0x41)  
    at job.cpp:900  
#20 0xb77d4044 in KIO::TransferJob::qt_invoke (this=0x85913c8, _id=18,   
    _o=0xbfffeab0) at qucom_p.h:312  
#21 0xb6afa067 in QObject::activate_signal ()  
   from /usr/share/qt3/lib/libqt-mt.so.3  
#22 0xb77aae9a in KIO::SlaveInterface::data (this=0x821b5c8, t0=@0x41)  
    at slaveinterface.moc:194  
#23 0xb77a7212 in KIO::SlaveInterface::dispatch (this=0x821b5c8, _cmd=100,   
    rawdata=@0xbfffee40) at slaveinterface.cpp:234  
#24 0xb77a6f40 in KIO::SlaveInterface::dispatch (this=0x821b5c8)  
    at slaveinterface.cpp:173  
#25 0xb77a3d48 in KIO::Slave::gotInput (this=0x821b5c8) at slave.cpp:300  
#26 0xb77a6688 in KIO::Slave::qt_invoke (this=0x821b5c8, _id=4, _o=0xbfffefa0)  
    at slave.moc:113  
#27 0xb6afa067 in QObject::activate_signal ()  
   from /usr/share/qt3/lib/libqt-mt.so.3  
#28 0xb6afa1be in QObject::activate_signal ()  
   from /usr/share/qt3/lib/libqt-mt.so.3  
#29 0xb6e15ee0 in QSocketNotifier::activated ()  
   from /usr/share/qt3/lib/libqt-mt.so.3  
#30 0xb6b15036 in QSocketNotifier::event ()  
   from /usr/share/qt3/lib/libqt-mt.so.3  
#31 0xb6aa2370 in QApplication::internalNotify ()  
   from /usr/share/qt3/lib/libqt-mt.so.3  
#32 0xb6aa19d4 in QApplication::notify ()  
from /usr/share/qt3/lib/libqt-mt.so.3  
#33 0xb70b3145 in KApplication::notify (this=0xbffff5e0, receiver=0x8225958,   
    event=0xbffff340) at kapplication.cpp:550  
#34 0xb6a92a10 in QEventLoop::activateSocketNotifiers ()  
   from /usr/share/qt3/lib/libqt-mt.so.3  
#35 0xb6a4e917 in QEventLoop::processEvents ()  
   from /usr/share/qt3/lib/libqt-mt.so.3  
#36 0xb6ab374c in QEventLoop::enterLoop ()  
   from /usr/share/qt3/lib/libqt-mt.so.3  
#37 0xb6ab360e in QEventLoop::exec () from /usr/share/qt3/lib/libqt-mt.so.3  
#38 0xb6aa257b in QApplication::exec () from /usr/share/qt3/lib/libqt-mt.so.3  
#39 0x0804a35a in main ()
Comment 1 Tung NGUYEN 2005-09-06 23:31:26 UTC
I can reproduce the problem using SVN commit 457252:

Using host libthread_db library "/lib/tls/libthread_db.so.1".
`shared object read from target memory' has disappeared; keeping its symbols.
[Thread debugging using libthread_db enabled]
[New Thread -1237297472 (LWP 4868)]
[KCrash handler]
#4  0xb7dbc84a in IconGroupItem::iconView () from /usr/lib/libdigikam.so.0
#5  0xb7dbd2d9 in IconItem::repaint () from /usr/lib/libdigikam.so.0
#6  0xb7dd419e in AlbumIconView::slotGotThumbnail ()
   from /usr/lib/libdigikam.so.0
#7  0xb7dd55b2 in AlbumIconView::qt_invoke () from /usr/lib/libdigikam.so.0
#8  0xb6ca41dd in QObject::activate_signal ()
   from /usr/lib/qt3/lib/libqt-mt.so.3
#9  0xb70e9401 in ?? () from /usr/lib/qt3/lib/libqt-mt.so.3
#10 0x081ffc28 in ?? ()
#11 0xb70e9434 in ?? () from /usr/lib/qt3/lib/libqt-mt.so.3
#12 0xb6f74016 in QGDict::look_string () from /usr/lib/qt3/lib/libqt-mt.so.3
#13 0xbf92a198 in ?? ()
#14 0xbf92a1ac in ?? ()
#15 0xbf92a1b8 in ?? ()
#16 0xb7e04912 in PixmapManager::signalPixmap () from /usr/lib/libdigikam.so.0
Comment 2 caulier.gilles 2005-09-08 21:02:47 UTC
I can reproduce the bug. It's indeep in digikam core. I need any time to solve it.

Gilles
Comment 3 Joern Ahrens 2005-09-09 12:49:30 UTC
SVN commit 458915 by jahrens:

When an image was saved with "Save As" with a filename that already existed in
the album, the new ImageInfo was first created through signalNewFilteredItems
but deleted through signalDeleteFilteredItem for the old image - because
both used the same filename.

BUG: 112000


 M  +19 -5     digikam/albumiconview.cpp  
 M  +1 -0      digikam/albumlister.cpp  
 M  +7 -1      utilities/imageeditor/imagewindow.cpp  


--- trunk/extragear/graphics/digikam/digikam/albumiconview.cpp #458914:458915
@@ -315,6 +315,14 @@
     ImageInfo* item;
     for (ImageInfoListIterator it(itemList); (item = it.current()); ++it)
     {
+        KURL url( item->kurl() );
+        url.cleanPath();
+
+        if (AlbumIconItem *oldItem = d->itemDict.find(url.url()))
+        {
+            slotImageListerDeleteItem(oldItem->imageInfo());
+        }
+
         AlbumIconGroupItem* group = d->albumDict.find(item->albumID());
         if (!group)
         {
@@ -332,8 +340,6 @@
         AlbumIconItem* iconItem = new AlbumIconItem(group, item);
         item->setViewItem(iconItem);
 
-        KURL url( item->kurl() );
-        url.cleanPath();
         d->itemDict.insert(url.url(), iconItem);
     }
 
@@ -347,6 +353,16 @@
 
     AlbumIconItem* iconItem = static_cast<AlbumIconItem*>(item->getViewItem());
 
+    KURL url(item->kurl());
+    url.cleanPath();
+    
+    AlbumIconItem *oldItem = d->itemDict[url.url()];
+    if( oldItem &&
+       (oldItem->imageInfo()->id() != iconItem->imageInfo()->id()))
+    {
+        return;
+    }
+
     d->pixMan->remove(item->kurl());
 
     emit signalItemDeleted(iconItem);
@@ -354,9 +370,7 @@
     delete iconItem;
     item->setViewItem(0);
 
-    KURL u(item->kurl());
-    u.cleanPath();
-    d->itemDict.remove(u.url());
+    d->itemDict.remove(url.url());
 
     IconGroupItem* group = firstGroup();
     IconGroupItem* tmp;
--- trunk/extragear/graphics/digikam/digikam/albumlister.cpp #458914:458915
@@ -120,6 +120,7 @@
     ds << d->filter;
     ds << AlbumSettings::instance()->getIconShowResolution();
 
+    // Protocol = digikamalbums -> kio_digikamalbums
     d->job = new KIO::TransferJob(album->kurl(), KIO::CMD_SPECIAL,
                                   ba, QByteArray(), false);
     connect(d->job, SIGNAL(result(KIO::Job*)),
--- trunk/extragear/graphics/digikam/utilities/imageeditor/imagewindow.cpp #458914:458915
@@ -1071,6 +1071,7 @@
     // Check for overwrite ----------------------------------------------------------
     
     QFileInfo fi(newURL.path());
+    bool fileExists = false;
     if ( fi.exists() )
     {
         int result =
@@ -1086,6 +1087,8 @@
 
         if (result != KMessageBox::Yes)
             return;
+
+        fileExists = true;
     }
 
     // Now do the actual saving -----------------------------------------------------
@@ -1176,7 +1179,10 @@
         m_urlCurrent = newURL;
     }
 
-    emit signalFileAdded(newURL);
+    if(fileExists)
+        emit signalFileModified(newURL);
+    else
+        emit signalFileAdded(newURL);
 
     m_canvas->setModified( false );
     kapp->restoreOverrideCursor();
Comment 4 Tung NGUYEN 2005-09-09 15:19:13 UTC
Hi Joern,

I have tested your SVN commit 458915 and now I can freely overwrite photos with "Save as..." without crash.

I think you can close the bug report. 

Thank you very much.
Comment 5 Joern Ahrens 2005-09-09 15:35:36 UTC
Cool, thanks for your feedback!