Comment #7 on issue 8809 by jer...@chromium.org: Crash in  
WaitableEventWatcher::StopWatching()
http://code.google.com/p/chromium/issues/detail?id=8809

The bug has to do with the destructors for RenderProcess & MessageLoopForIO  
and how they interact with
IPC::SyncChannel in RendererMain().

IPC::SyncChannel waits on render_process' shutdown_event_ , render_process  
goes out of scope before the
end of the function and from that point on it's shutdown_event_ is invalid.

The plot thickens:
What's supposed to happen here is that render_process' destructor signals  
shutdown_event_, this should wake
up IPC::SyncChannel and get it to unhook itself from the surrounding  
world.  The problem is that
WaitableEvent::Signal uses an AsyncTask so the signal is only dispatched at  
some future date.

So shutdown_event_ is invalid, and IPC::SyncChannel is still happilly  
maintaining a reference to it.

The problem then becomes that IPC::SyncChannel is using a  
WaitableEventWatcher to listen to the event which
hooks itself in as a DestructionObserver for the current message loop (the  
aforementioned
MessageLoopForIO).

Now we drop off the end of RenderMain() and MessageLoopForIO's destructor  
is called which calls back to all
it's DestructionObserver's.  The WaitableEventWatcher then attempts to lock  
the RenderProcess'
shutdown_event_ in order to remove itself from the list of waiters, but  
that memory is no longer valid since
RenderProcess has already died and therein lies our problem...

--
You received this message because you are listed in the owner
or CC fields of this issue, or because you starred this issue.
You may adjust your issue notification preferences at:
http://code.google.com/hosting/settings

--~--~---------~--~----~------------~-------~--~----~
Automated mail from issue updates at http://crbug.com/
Subscription options: http://groups.google.com/group/chromium-bugs
-~----------~----~----~----~------~----~------~--~---

Reply via email to