[webkit-dev] WTF::callOnMainThread() and re-entrancy

Alexey Proskuryakov ap at webkit.org
Tue Mar 9 11:13:14 PST 2010


On 09.03.2010, at 9:45, Drew Wilson wrote:

> Yeah, it's a race condition - it seems to all depend on whether the  
> worker resource gets loaded before the postMessage loop starts.  
> Failure rate is around 30-50% on my machine.

It would help to have a more detailed description of the problem. I've  
been following the discussion in bugs and in this thread, but I'm  
still unsure about some aspects of it.

Seems that there are two issues at hand:

1) We feel the need to change how Document::postTask() behaves,  
because otherwise, the patch for <https://bugs.webkit.org/show_bug.cgi?id=34726 
 > doesn't work. We feel the need because it makes little sense for it  
to have drastically different behavior depending on what thread it's  
called from.

It feels like a good change to make indeed, but I'm surprised that it  
apparently went through review unmentioned and unquestioned. The  
questions to ask are why exactly it was needed, and whether there are  
other ways to fix bug 34726.

2) if we make that change, the worker-cloneport.html test starts to  
fail.

I didn't attempt to debug this myself, and I don't quite understand  
the problem description. I see only one postMessage loop in the test,  
and it's in worker code. How can it be executed before the worker  
resource gets loaded?

> It looks like events have priority in Cocoa, and I'm guessing that  
> performSelectorOnMainThread() creates events with a higher priority  
> than those generated by URLConnection, which can lead to starvation.  
> I'm not certain what the right fix is, other than to maybe use a  
> different method of dispatching events other than  
> performSelectorOnMainThread that lets us set a lower priority?

These main thread calls do not use events for processing. CF/NSRunLoop  
has a concept of run loop sources, which can generate events or  
perform other actions, see <http://developer.apple.com/mac/library/documentation/CoreFoundation/Reference/CFRunLoopRef/Reference/reference.html 
 > and <http://developer.apple.com/Mac/library/documentation/CoreFoundation/Reference/CFRunLoopSourceRef/Reference/reference.html 
 >.

- WBR, Alexey Proskuryakov



More information about the webkit-dev mailing list