From 9c22346d61243be8a24325fa719db685ee1330e3 Mon Sep 17 00:00:00 2001 From: Floris Bos Date: Tue, 1 Feb 2022 15:30:47 +0100 Subject: [PATCH] If exiting program while downloading, terminate thread gracefully Fix "terminate called without an active exception" message on Linux --- downloadextractthread.cpp | 12 ++++-------- downloadextractthread.h | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/downloadextractthread.cpp b/downloadextractthread.cpp index 7e58818..6a3604e 100644 --- a/downloadextractthread.cpp +++ b/downloadextractthread.cpp @@ -54,12 +54,12 @@ DownloadExtractThread::DownloadExtractThread(const QByteArray &url, const QByteA DownloadExtractThread::~DownloadExtractThread() { + _cancelled = true; + _cancelExtract(); if (!_extractThread->wait(2000)) { _extractThread->terminate(); } - _queue.clear(); - _cv.notify_one(); qFreeAligned(_abuf[0]); qFreeAligned(_abuf[1]); } @@ -105,12 +105,8 @@ void DownloadExtractThread::_cancelExtract() std::unique_lock lock(_queueMutex); _queue.clear(); _queue.push_back(QByteArray()); - - if (_queue.size() == 1) - { - lock.unlock(); - _cv.notify_one(); - } + lock.unlock(); + _cv.notify_one(); } void DownloadExtractThread::cancelDownload() diff --git a/downloadextractthread.h b/downloadextractthread.h index e4744a0..14fc03b 100644 --- a/downloadextractthread.h +++ b/downloadextractthread.h @@ -48,7 +48,7 @@ protected: QByteArray _popQueue(); void _pushQueue(const char *data, size_t len); - virtual void _cancelExtract(); + void _cancelExtract(); virtual size_t _writeData(const char *buf, size_t len); virtual void _onDownloadSuccess(); virtual void _onDownloadError(const QString &msg);