diff options
-rw-r--r-- | src/gui/image/qpixmapcache.cpp | 7 | ||||
-rw-r--r-- | tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp | 11 |
2 files changed, 11 insertions, 7 deletions
diff --git a/src/gui/image/qpixmapcache.cpp b/src/gui/image/qpixmapcache.cpp index 73448943e1..625e145647 100644 --- a/src/gui/image/qpixmapcache.cpp +++ b/src/gui/image/qpixmapcache.cpp @@ -341,7 +341,6 @@ bool QPMCache::insert(const QString& key, const QPixmap &pixmap, int cost) } else { //Insertion failed we released the new allocated key cacheKeys.remove(key); - releaseKey(cacheKey); } return success; } @@ -355,9 +354,6 @@ QPixmapCache::Key QPMCache::insert(const QPixmap &pixmap, int cost) theid = startTimer(flush_time); t = false; } - } else { - //Insertion failed we released the key and return an invalid one - releaseKey(cacheKey); } return cacheKey; } @@ -377,9 +373,6 @@ bool QPMCache::replace(const QPixmapCache::Key &key, const QPixmap &pixmap, int t = false; } const_cast<QPixmapCache::Key&>(key) = cacheKey; - } else { - //Insertion failed we released the key - releaseKey(cacheKey); } return success; } diff --git a/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp b/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp index 8dcf104035..8a2a35f86c 100644 --- a/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp +++ b/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp @@ -56,6 +56,7 @@ private slots: void pixmapKey(); void noLeak(); void strictCacheLimit(); + void noCrashOnLargeInsert(); }; static QPixmapCache::KeyData* getPrivate(QPixmapCache::Key &key) @@ -525,5 +526,15 @@ void tst_QPixmapCache::strictCacheLimit() QVERIFY(QPixmapCache::totalUsed() <= limit); } +void tst_QPixmapCache::noCrashOnLargeInsert() +{ + QPixmapCache::clear(); + QPixmapCache::setCacheLimit(100); + QPixmap pixmap(500, 500); + pixmap.fill(Qt::transparent); + QPixmapCache::insert("test", pixmap); + QVERIFY(true); // no crash +} + QTEST_MAIN(tst_QPixmapCache) #include "tst_qpixmapcache.moc" |