From dac9480a652d591c41ec9ef6f6c966c59a252142 Mon Sep 17 00:00:00 2001 From: antonio-111 <36404162+antonio-111@users.noreply.github.com> Date: Wed, 11 Mar 2020 10:59:42 +0300 Subject: [PATCH] Fixed crash when loading invalid image. (#160) * Fixed crash when loading invalid image. * Fixed crash when loading invalid image (part2). --- src/ImageHandler.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/ImageHandler.cpp b/src/ImageHandler.cpp index d9d257f..a0c0ce2 100644 --- a/src/ImageHandler.cpp +++ b/src/ImageHandler.cpp @@ -36,22 +36,24 @@ QImage ImageHandler::extractQImage(QObject *imageObj, int offsetX, int offsetY, QTime timer; timer.start(); QSharedPointer result = item->grabToImage(); - pendingGrabbersLocker.lockForWrite(); - pendingGrabbers << result.data(); - pendingGrabbersLocker.unlock(); - - connect(result.data(), &QQuickItemGrabResult::ready, this, &ImageHandler::imageGrabberReady); - while (timer.elapsed() < 1000) { - pendingGrabbersLocker.lockForRead(); - if (!pendingGrabbers.contains(result.data())) { - pendingGrabbersLocker.unlock(); - break; - } + if (result) { + pendingGrabbersLocker.lockForWrite(); + pendingGrabbers << result.data(); pendingGrabbersLocker.unlock(); - qApp->processEvents(); - QThread::yieldCurrentThread(); + + connect(result.data(), &QQuickItemGrabResult::ready, this, &ImageHandler::imageGrabberReady); + while (timer.elapsed() < 1000) { + pendingGrabbersLocker.lockForRead(); + if (!pendingGrabbers.contains(result.data())) { + pendingGrabbersLocker.unlock(); + break; + } + pendingGrabbersLocker.unlock(); + qApp->processEvents(); + QThread::yieldCurrentThread(); + } + img = result->image(); } - img = result->image(); #else // QT_VERSION >= 0x050000 QGraphicsObject *item = qobject_cast(imageObj);