From a9a8141b2035eb2d4408b21937ab63cd7908bb8b Mon Sep 17 00:00:00 2001 From: Steve Herrell Date: Mon, 15 Nov 2010 20:56:26 -0500 Subject: [PATCH] Fixed thumbnail delete ordering issues (also found ffsup2). Fixed minor memory leak found by valgrind. Fixed thumbnail processing ordering issue. --- rtengine/rtthumbnail.cc | 3 +++ rtgui/filebrowser.cc | 1 - rtgui/filebrowserentry.cc | 6 +++++- rtgui/thumbimageupdater.cc | 13 ++++++++----- rtgui/thumbnail.cc | 5 ++++- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index d19bd3b06..2e1c2238e 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -98,6 +98,9 @@ Thumbnail* Thumbnail::loadFromMemory (const char* image, int length, int &w, int } tpp->thumbImg = img->resize (w, h, TI_Nearest); + + tpp->autowbTemp=2700; + tpp->autowbGreen=1.0; delete img; tpp->init (); diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc index 6d73cc722..0be846d28 100644 --- a/rtgui/filebrowser.cc +++ b/rtgui/filebrowser.cc @@ -249,7 +249,6 @@ void FileBrowser::close () { for (int i=0; ithumbnail->decreaseRef (); delete fd[i]; } fd.clear (); diff --git a/rtgui/filebrowserentry.cc b/rtgui/filebrowserentry.cc index e8e818020..27ba33f72 100644 --- a/rtgui/filebrowserentry.cc +++ b/rtgui/filebrowserentry.cc @@ -48,6 +48,7 @@ FileBrowserEntry::FileBrowserEntry (Thumbnail* thm, const Glib::ustring& fname) editedIcon = safe_create_from_file (argv0+"/images/edited.png"); recentlySavedIcon = safe_create_from_file (argv0+"/images/saved.png"); enqueuedIcon = safe_create_from_file (argv0+"/images/processing.png"); + iconsLoaded = true; } if (thm) @@ -68,8 +69,10 @@ FileBrowserEntry::~FileBrowserEntry () { } thumbImageUpdater->removeJobs (this); - if (thumbnail) + if (thumbnail){ thumbnail->removeThumbnailListener (this); + thumbnail->decreaseRef (); + } } void FileBrowserEntry::refreshThumbnailImage () { @@ -186,6 +189,7 @@ void FileBrowserEntry::updateImage (rtengine::IImage8* img, double scale, rtengi if ( feih == 0 || feih->destroyed ) { + img->free(); return; } diff --git a/rtgui/thumbimageupdater.cc b/rtgui/thumbimageupdater.cc index 38720095f..1f87418a8 100644 --- a/rtgui/thumbimageupdater.cc +++ b/rtgui/thumbimageupdater.cc @@ -97,7 +97,7 @@ public: // nothing to do; could be jobs have been removed if ( jobs_.empty() ) { - DEBUG("processing: nothing to do (%d,%d)",paused_,jobs_.empty()); + DEBUG("processing: nothing to do (%d)",jobs_.empty()); return; } @@ -114,12 +114,15 @@ public: } // see if any none upgrade jobs exist - for ( i = jobs_.begin(); i != jobs_.end(); ++i) + if ( i == jobs_.end() ) { - if ( !i->upgrade_ ) + for ( i = jobs_.begin(); i != jobs_.end(); ++i) { - DEBUG("processing(not-upgrade) %s",i->thumbnail_->getFileName().c_str()); - break; + if ( !i->upgrade_ ) + { + DEBUG("processing(not-upgrade) %s",i->thumbnail_->getFileName().c_str()); + break; + } } } diff --git a/rtgui/thumbnail.cc b/rtgui/thumbnail.cc index cb73bd1bf..3c5afbcf6 100644 --- a/rtgui/thumbnail.cc +++ b/rtgui/thumbnail.cc @@ -489,13 +489,16 @@ void Thumbnail::setFileName (const Glib::ustring fn) { void Thumbnail::addThumbnailListener (ThumbnailListener* tnl) { + increaseRef(); listeners.push_back (tnl); } void Thumbnail::removeThumbnailListener (ThumbnailListener* tnl) { std::vector::iterator f = std::find (listeners.begin(), listeners.end(), tnl); - if (f!=listeners.end()) + if (f!=listeners.end()) { listeners.erase (f); + decreaseRef(); + } }