]> sigrok.org Git - pulseview.git/commitdiff
Fix #705 by preventing the use of invalid instances
authorSoeren Apel <redacted>
Sun, 17 Apr 2016 13:28:51 +0000 (15:28 +0200)
committerSoeren Apel <redacted>
Sun, 17 Apr 2016 13:28:51 +0000 (15:28 +0200)
As QCache owns the object instances it manages, inserting
an object into the cache transfers ownership automatically.
This means we can't use an instance after it has been
inserted into the cache as this results in a double free
situation as we'd end up calling the destructor on the same
object instance as the cache.

pv/view/logicsignal.cpp

index 5584a1fcb70a0fb334e85b2d2165a6b965efabfe..3c85b9319083d4cb9c0e401a0fa949ed6513cb5f 100644 (file)
@@ -449,24 +449,22 @@ void LogicSignal::modify_trigger()
 
 const QIcon* LogicSignal::get_icon(const char *path)
 {
-       const QIcon *icon = icon_cache_.take(path);
-       if (!icon) {
-               icon = new QIcon(path);
+       if (!icon_cache_.contains(path)) {
+               const QIcon *icon = new QIcon(path);
                icon_cache_.insert(path, icon);
        }
 
-       return icon;
+       return icon_cache_.take(path);
 }
 
 const QPixmap* LogicSignal::get_pixmap(const char *path)
 {
-       const QPixmap *pixmap = pixmap_cache_.take(path);
-       if (!pixmap) {
-               pixmap = new QPixmap(path);
+       if (!pixmap_cache_.contains(path)) {
+               const QPixmap *pixmap = new QPixmap(path);
                pixmap_cache_.insert(path, pixmap);
        }
 
-       return pixmap;
+       return pixmap_cache_.take(path);
 }
 
 void LogicSignal::on_trigger()