Chromium Code Reviews| Index: remoting/host/setup/native_messaging_host.cc |
| diff --git a/remoting/host/setup/native_messaging_host.cc b/remoting/host/setup/native_messaging_host.cc |
| index 0492736c61743bcc381b5b1ebfcd026b1706ca3b..ec9c65747fc8ce6ca86c6b55fbbbc8b2ccd71bbf 100644 |
| --- a/remoting/host/setup/native_messaging_host.cc |
| +++ b/remoting/host/setup/native_messaging_host.cc |
| @@ -76,6 +76,8 @@ NativeMessagingHost::NativeMessagingHost( |
| daemon_controller_(daemon_controller.Pass()), |
| pairing_registry_(pairing_registry), |
| oauth_client_(oauth_client.Pass()), |
| + pending_requests_(0), |
| + shutdown_(false), |
| weak_factory_(this) { |
| weak_ptr_ = weak_factory_.GetWeakPtr(); |
| } |
| @@ -92,17 +94,20 @@ void NativeMessagingHost::Start() { |
| void NativeMessagingHost::Shutdown() { |
| DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
| - if (!quit_closure_.is_null()) { |
| + |
| + if (shutdown_) |
| + return; |
| + |
| + shutdown_ = true; |
| + if (!pending_requests_) |
| caller_task_runner_->PostTask(FROM_HERE, quit_closure_); |
| - quit_closure_.Reset(); |
| - } |
| } |
| void NativeMessagingHost::ProcessMessage(scoped_ptr<base::Value> message) { |
| DCHECK(caller_task_runner_->BelongsToCurrentThread()); |
| // Don't process any more messages if Shutdown() has been called. |
| - if (quit_closure_.is_null()) |
| + if (shutdown_) |
| return; |
| const base::DictionaryValue* message_dict; |
| @@ -129,6 +134,9 @@ void NativeMessagingHost::ProcessMessage(scoped_ptr<base::Value> message) { |
| response_dict->SetString("type", type + "Response"); |
| + DCHECK_GE(pending_requests_, 0); |
| + pending_requests_ += 1; |
|
Lambros
2013/09/06 03:03:13
pending_requests++ ?
alexeypa (please no reviews)
2013/09/06 16:14:57
Done.
|
| + |
| bool success = false; |
| if (type == "hello") { |
| success = ProcessHello(*message_dict, response_dict.Pass()); |
| @@ -165,8 +173,10 @@ void NativeMessagingHost::ProcessMessage(scoped_ptr<base::Value> message) { |
| LOG(ERROR) << "Unsupported request type: " << type; |
| } |
| - if (!success) |
| + if (!success) { |
| + pending_requests_ -= 1; |
|
Lambros
2013/09/06 03:03:13
pending_requests_-- ?
alexeypa (please no reviews)
2013/09/06 16:14:57
Done.
|
| Shutdown(); |
| + } |
| } |
| bool NativeMessagingHost::ProcessHello( |
| @@ -406,6 +416,12 @@ void NativeMessagingHost::SendResponse( |
| if (!native_messaging_writer_.WriteMessage(*response)) |
| Shutdown(); |
| + |
| + pending_requests_ -= 1; |
|
Lambros
2013/09/06 03:03:13
pending_requests_-- ?
alexeypa (please no reviews)
2013/09/06 16:14:57
Done.
|
| + DCHECK_GE(pending_requests_, 0); |
| + |
| + if (shutdown_ && !pending_requests_) |
| + caller_task_runner_->PostTask(FROM_HERE, quit_closure_); |
| } |
| void NativeMessagingHost::SendConfigResponse( |