mirror of
https://github.com/YACReader/yacreader
synced 2025-06-04 01:28:55 -04:00
Reader: fix thread safety bugs in PageLoader
This commit is contained in:
parent
c1810b9e54
commit
12aabf7960
@ -260,6 +260,8 @@ PageLoader::PageLoader(QMutex * m):
|
||||
|
||||
PageLoader::~PageLoader()
|
||||
{
|
||||
//TODO this destructor never runs. If it is ever called, it will hang, because
|
||||
//the implementation is broken due to the absolutely endless loop in run().
|
||||
mutex->lock();
|
||||
condition.wakeOne();
|
||||
mutex->unlock();
|
||||
@ -284,9 +286,11 @@ void PageLoader::generate(int index, QSize size,const QByteArray & rImage)
|
||||
start();
|
||||
else
|
||||
{
|
||||
mutex->lock();
|
||||
// already running, wake up whenever ready
|
||||
restart = true;
|
||||
condition.wakeOne();
|
||||
mutex->unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@ -314,7 +318,7 @@ void PageLoader::run()
|
||||
|
||||
// put to sleep
|
||||
mutex->lock();
|
||||
if (!this->restart)
|
||||
while (!this->restart)
|
||||
condition.wait(mutex);
|
||||
restart = false;
|
||||
mutex->unlock();
|
||||
|
Loading…
x
Reference in New Issue
Block a user