From 2b610dd17148a71cad5da51b3eabf31d2cdc80c7 Mon Sep 17 00:00:00 2001 From: "hclam@chromium.org" Date: Tue, 10 Aug 2010 18:45:40 +0000 Subject: Resubmit "Start chromoting host in the service process though a method call" This change exposes method calls to configure the chromoting host and allow it to be started from a method. This will allow us to use IPC message to start the chromoting host. TEST=unit_tests --gtest_filter=ServiceProcess* BUG=50243, 50244 Review URL: http://codereview.chromium.org/3105002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55593 0039d316-1c4b-4281-b951-d872f2087c98 --- remoting/jingle_glue/jingle_client.cc | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'remoting/jingle_glue') diff --git a/remoting/jingle_glue/jingle_client.cc b/remoting/jingle_glue/jingle_client.cc index eb89e21..b3ea334 100644 --- a/remoting/jingle_glue/jingle_client.cc +++ b/remoting/jingle_glue/jingle_client.cc @@ -76,6 +76,11 @@ void JingleClient::DoConnect(scoped_refptr channel, } void JingleClient::Close() { + // Once we are closed we really shouldn't talk to the callback again. In the + // case when JingleClient outlives the owner access the callback is not safe. + // TODO(hclam): We need to lock to reset callback. + callback_ = NULL; + message_loop()->PostTask( FROM_HERE, NewRunnableMethod(this, &JingleClient::DoClose)); } @@ -85,12 +90,14 @@ void JingleClient::DoClose() { // If we have not yet initialized and the client is already closed then // don't close again. - if (!callback_ || state_ == CLOSED) + if (state_ == CLOSED) return; - client_->Disconnect(); - // Client is deleted by TaskRunner. - client_ = NULL; + if (client_) { + client_->Disconnect(); + // Client is deleted by TaskRunner. + client_ = NULL; + } tunnel_session_client_.reset(); port_allocator_.reset(); session_manager_.reset(); -- cgit v1.1