diff options
| author | David Faure <david.faure@kdab.com> | 2013-06-21 10:32:17 +0200 |
|---|---|---|
| committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-08-24 13:09:46 +0200 |
| commit | dacf9961da86751a59da0e84bc943fe0d1c8d95b (patch) | |
| tree | 88fb959024904484ec8e7442b88c4777246a42a4 /src/sql/drivers/db2/qsql_db2.cpp | |
| parent | 7c2a418857cd20e3e59852f0c1561a26f17d9825 (diff) | |
QThreadPool: fix counting of waiting threads
QTBUG-21051 has a testcase where activeThreadCount() could actually
end up at -1 (converted to an autotest in this commit).
The reason was: start() calls tryStart() which returns false due to
too many active threads (reserveThread() causes this), so it calls
enqueueTask() - which actually wakes up the waiting thread, but
it didn't decrement the number of waiting threads.
Note that tryStart() is "if I can grab a waiting thread, enqueue task and wake it"
while start(), in case tryStart() fails, wants to "enqueue, and then if I can grab
a waiting thread, wake it". This is why enqueue shouldn't wake; waking must happen
only if we can grab a thread (d->waitingThreads > 0).
Task-number: QTBUG-21051
Change-Id: I3d98337103031c9bdf0bf365295f245be0c66aa7
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/sql/drivers/db2/qsql_db2.cpp')
0 files changed, 0 insertions, 0 deletions
