Bug 17177
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 |
Alexey Proskuryakov
With WebCore SQL logging enabled, open <http://bugs.webkit.org/attachment.cgi?id=18455>. It runs without assertion failures now, but after a while, it just stops (it doesn't freeze Safari, but no more SQL requests are being served).
Attachments | ||
---|---|---|
Add attachment proposed patch, testcase, etc. |
Alexey Proskuryakov
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.
Alexey Proskuryakov
<rdar://problem/5729619>
Alexey Proskuryakov
Fixed in <http://trac.webkit.org/projects/webkit/changeset/30172>.