diff options
author | atwilson@chromium.org <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-17 22:00:51 +0000 |
---|---|---|
committer | atwilson@chromium.org <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-17 22:00:51 +0000 |
commit | 6de0bcf0025517c4f31eafce162d90588c609103 (patch) | |
tree | 8ae27ceda2696e65a7b6d7b2d6a5474811914d88 /chrome/renderer/websharedworker_proxy.cc | |
parent | 87ef23a2a8a693c9452ddf5c65d47c9fd62e032f (diff) | |
download | chromium_src-6de0bcf0025517c4f31eafce162d90588c609103.zip chromium_src-6de0bcf0025517c4f31eafce162d90588c609103.tar.gz chromium_src-6de0bcf0025517c4f31eafce162d90588c609103.tar.bz2 |
Fixes a race condition when a shared worker exits while one parent is loading
it.
Changed the shared worker startup code to assign a route ID at the time that we
initially lookup the worker, and pass that same route ID in when we later try
to create the worker, to gracefully handle this race condition.
BUG=29243
TEST=existing tests suffice (can't reproduce race condition in tests)
Review URL: http://codereview.chromium.org/600103
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@39274 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/websharedworker_proxy.cc')
-rw-r--r-- | chrome/renderer/websharedworker_proxy.cc | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/chrome/renderer/websharedworker_proxy.cc b/chrome/renderer/websharedworker_proxy.cc index c6741c1..afb668f 100644 --- a/chrome/renderer/websharedworker_proxy.cc +++ b/chrome/renderer/websharedworker_proxy.cc @@ -11,9 +11,14 @@ WebSharedWorkerProxy::WebSharedWorkerProxy(ChildThread* child_thread, unsigned long long document_id, + bool exists, int route_id, int render_view_route_id) - : WebWorkerBase(child_thread, document_id, route_id, render_view_route_id), + : WebWorkerBase(child_thread, + document_id, + exists ? route_id : MSG_ROUTING_NONE, + render_view_route_id), + pending_route_id_(route_id), connect_listener_(NULL) { } @@ -27,7 +32,8 @@ void WebSharedWorkerProxy::startWorkerContext( const WebKit::WebString& user_agent, const WebKit::WebString& source_code) { DCHECK(!isStarted()); - CreateWorkerContext(script_url, true, name, user_agent, source_code); + CreateWorkerContext(script_url, true, name, user_agent, source_code, + pending_route_id_); } void WebSharedWorkerProxy::terminateWorkerContext() { |