Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(398)

Unified Diff: remoting/jingle_glue/jingle_client.cc

Issue 3084024: Start chromoting host in the service process though a method call (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: remoting/jingle_glue/jingle_client.cc
diff --git a/remoting/jingle_glue/jingle_client.cc b/remoting/jingle_glue/jingle_client.cc
index eb89e2181d8a88c5d4436b7d59c1a206998a2f38..b3ea334f1e5203e7cfd9247f7a19a271ee0679b5 100644
--- a/remoting/jingle_glue/jingle_client.cc
+++ b/remoting/jingle_glue/jingle_client.cc
@@ -76,6 +76,11 @@ void JingleClient::DoConnect(scoped_refptr<JingleChannel> 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();

Powered by Google App Engine
This is Rietveld 408576698