diff options
author | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-20 19:32:43 +0000 |
---|---|---|
committer | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-20 19:32:43 +0000 |
commit | 770a28bb9e03a5761e8060d2037d2c360c227bf1 (patch) | |
tree | 43d6aedcd38febc978cfebe64ef8a87a8559a052 /net/proxy | |
parent | 8511b2c7075a3fbc9b27652deaab575f9d5ea49d (diff) | |
download | chromium_src-770a28bb9e03a5761e8060d2037d2c360c227bf1.zip chromium_src-770a28bb9e03a5761e8060d2037d2c360c227bf1.tar.gz chromium_src-770a28bb9e03a5761e8060d2037d2c360c227bf1.tar.bz2 |
Fix a data race found by ThreadSanitizer in LoadLog::Release().
The scoped_refptr's destructor was being called at the very end of the function scope.
This meant that worker_log->Release() was called *after* PostTask().
However since the posted task also called worker_log->Release() (but from a different thread) this was a race.
BUG=22272
Review URL: http://codereview.chromium.org/308005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29551 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/proxy')
-rw-r--r-- | net/proxy/single_threaded_proxy_resolver.cc | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/proxy/single_threaded_proxy_resolver.cc b/net/proxy/single_threaded_proxy_resolver.cc index 02afcfc..ab13fa1 100644 --- a/net/proxy/single_threaded_proxy_resolver.cc +++ b/net/proxy/single_threaded_proxy_resolver.cc @@ -139,12 +139,13 @@ class SingleThreadedProxyResolver::Job private: // Runs on the worker thread. void DoQuery(ProxyResolver* resolver) { - scoped_refptr<LoadLog> worker_log(new LoadLog); + LoadLog* worker_log = new LoadLog; + worker_log->AddRef(); // Balanced in QueryComplete. + int rv = resolver->GetProxyForURL(url_, &results_buf_, NULL, NULL, worker_log); DCHECK_NE(rv, ERR_IO_PENDING); - worker_log->AddRef(); // Balanced in QueryComplete. origin_loop_->PostTask(FROM_HERE, NewRunnableMethod(this, &Job::QueryComplete, rv, worker_log)); } |