diff options
author | mnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-21 14:29:17 +0000 |
---|---|---|
committer | mnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-21 14:29:17 +0000 |
commit | ecf1acef2857dbe88f28d6a722b4cab3d8045f1d (patch) | |
tree | 6b8d267e8f301a6828708a2fc839881a94967836 /content | |
parent | bed80d86088634f50f40b84c93cf066a11697b30 (diff) | |
download | chromium_src-ecf1acef2857dbe88f28d6a722b4cab3d8045f1d.zip chromium_src-ecf1acef2857dbe88f28d6a722b4cab3d8045f1d.tar.gz chromium_src-ecf1acef2857dbe88f28d6a722b4cab3d8045f1d.tar.bz2 |
Fix self-destruction of DevToolsHttpHandlerImpl on Stop.
Using scoped_refptr doesn't look as a good idea, as well as posting a task to
the IO thread while destroying the object on the UI thread.
R=pfeldman@chromium.org
Review URL: http://codereview.chromium.org/9016009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@115334 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/debugger/devtools_http_handler_impl.cc | 12 | ||||
-rw-r--r-- | content/browser/debugger/devtools_http_handler_impl.h | 3 | ||||
-rw-r--r-- | content/public/browser/devtools_http_handler.h | 1 |
3 files changed, 9 insertions, 7 deletions
diff --git a/content/browser/debugger/devtools_http_handler_impl.cc b/content/browser/debugger/devtools_http_handler_impl.cc index e641a7f..859ca0d 100644 --- a/content/browser/debugger/devtools_http_handler_impl.cc +++ b/content/browser/debugger/devtools_http_handler_impl.cc @@ -160,8 +160,7 @@ void DevToolsHttpHandlerImpl::Start() { void DevToolsHttpHandlerImpl::Stop() { BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, - base::Bind(&DevToolsHttpHandlerImpl::Teardown, this)); - protect_ptr_ = NULL; + base::Bind(&DevToolsHttpHandlerImpl::TeardownAndRelease, this)); } void DevToolsHttpHandlerImpl::OnHttpRequest( @@ -467,10 +466,10 @@ DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl( : ip_(ip), port_(port), overridden_frontend_url_(frontend_host), - delegate_(delegate), - ALLOW_THIS_IN_INITIALIZER_LIST(protect_ptr_(this)) { + delegate_(delegate) { if (overridden_frontend_url_.empty()) overridden_frontend_url_ = "/devtools/devtools.html"; + AddRef(); } void DevToolsHttpHandlerImpl::Init() { @@ -478,8 +477,11 @@ void DevToolsHttpHandlerImpl::Init() { } // Run on I/O thread -void DevToolsHttpHandlerImpl::Teardown() { +void DevToolsHttpHandlerImpl::TeardownAndRelease() { server_ = NULL; + BrowserThread::PostTask( + BrowserThread::UI, FROM_HERE, + base::Bind(&DevToolsHttpHandlerImpl::Release, this)); } void DevToolsHttpHandlerImpl::Bind(net::URLRequest* request, diff --git a/content/browser/debugger/devtools_http_handler_impl.h b/content/browser/debugger/devtools_http_handler_impl.h index 69ead40..e9be675 100644 --- a/content/browser/debugger/devtools_http_handler_impl.h +++ b/content/browser/debugger/devtools_http_handler_impl.h @@ -70,7 +70,7 @@ class DevToolsHttpHandlerImpl int bytes_read) OVERRIDE; void Init(); - void Teardown(); + void TeardownAndRelease(); void Bind(net::URLRequest* request, int connection_id); void RequestCompleted(net::URLRequest* request); @@ -100,7 +100,6 @@ class DevToolsHttpHandlerImpl ConnectionToClientHostMap; ConnectionToClientHostMap connection_to_client_host_ui_; scoped_ptr<DevToolsHttpHandlerDelegate> delegate_; - scoped_refptr<DevToolsHttpHandlerImpl> protect_ptr_; DISALLOW_COPY_AND_ASSIGN(DevToolsHttpHandlerImpl); }; diff --git a/content/public/browser/devtools_http_handler.h b/content/public/browser/devtools_http_handler.h index b8e4be7..58e7d9f 100644 --- a/content/public/browser/devtools_http_handler.h +++ b/content/public/browser/devtools_http_handler.h @@ -27,6 +27,7 @@ class DevToolsHttpHandler { DevToolsHttpHandlerDelegate* delegate); // Called from the main thread in order to stop protocol handler. + // Automatically destroys the handler instance. virtual void Stop() = 0; protected: |