From ae89b8d559bfa6b3a2c1d404b21386bcc8995472 Mon Sep 17 00:00:00 2001 From: "pfeldman@chromium.org" Date: Thu, 16 Dec 2010 17:16:08 +0000 Subject: DevTools: browser CRASH upon listen socket disconnect in remote debugging. BUG=59930 Review URL: http://codereview.chromium.org/5905004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69413 0039d316-1c4b-4281-b951-d872f2087c98 --- .../browser/debugger/devtools_http_protocol_handler.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'chrome/browser/debugger/devtools_http_protocol_handler.cc') diff --git a/chrome/browser/debugger/devtools_http_protocol_handler.cc b/chrome/browser/debugger/devtools_http_protocol_handler.cc index e60045f..9f23945 100644 --- a/chrome/browser/debugger/devtools_http_protocol_handler.cc +++ b/chrome/browser/debugger/devtools_http_protocol_handler.cc @@ -270,6 +270,18 @@ void DevToolsHttpProtocolHandler::OnCloseUI(HttpListenSocket* socket) { client_host->NotifyCloseListener(); delete client_host; socket_to_client_host_ui_.erase(socket); + + // We are holding last reference to scoped refptr 'socket' here. + // We can't exit method just like that since 'socket' is going to + // be destroyed on the UI thread then. Schedule no-op to IO thread + // so that socket is destroyed on IO instead. + BrowserThread::PostTask( + BrowserThread::IO, + FROM_HERE, + NewRunnableMethod( + this, + &DevToolsHttpProtocolHandler::ReleaseSocket, + make_scoped_refptr(socket))); } void DevToolsHttpProtocolHandler::OnResponseStarted(net::URLRequest* request) { @@ -404,6 +416,11 @@ void DevToolsHttpProtocolHandler::AcceptWebSocket( request)); } +void DevToolsHttpProtocolHandler::ReleaseSocket( + HttpListenSocket* socket) { + // This in fact is scoped ref ptr. It'll get nuked on exit. +} + TabContents* DevToolsHttpProtocolHandler::GetTabContents(int session_id) { for (BrowserList::const_iterator it = BrowserList::begin(), end = BrowserList::end(); it != end; ++it) { -- cgit v1.1