Summary: | Storage tasks are getting lost | ||
---|---|---|---|
Product: | WebKit | Reporter: | Alexey Proskuryakov <ap> |
Component: | WebCore Misc. | Assignee: | Nobody <webkit-unassigned> |
Status: | RESOLVED FIXED | ||
Severity: | Normal | CC: | beidson |
Priority: | P2 | Keywords: | InRadar |
Version: | 528+ (Nightly build) | ||
Hardware: | Mac | ||
OS: | OS X 10.5 | ||
URL: | http://bugs.webkit.org/attachment.cgi?id=18455 |
Description
Alexey Proskuryakov
2008-02-04 14:32:01 PST
The database thread loop looks like this: while (!m_terminationRequested) { m_threadMutex.unlock(); AutodrainedPool pool; LOG(StorageAPI, "Iteration of main loop for DatabaseThread %p", this); bool result; do { result = dispatchNextTaskIdentifier(); if (m_terminationRequested) break; } while(result); if (m_terminationRequested) break; pool.cycle(); m_threadMutex.lock(); m_threadCondition.wait(m_threadMutex); } It's pretty clear how the wakeup is lost - if a new task is dispatched after the inner loop has decided that it has nothing else to do, but before we're stopped on the condition, the condition is signaled in vain. |