diff options
author | sehr@chromium.org <sehr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-23 21:38:20 +0000 |
---|---|---|
committer | sehr@chromium.org <sehr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-23 21:38:20 +0000 |
commit | 6e70b1981e49fc49ec51e9b82987cf4d692e4b8a (patch) | |
tree | f348d107187c393fbd12fd9774edebc44372b5c3 | |
parent | 91aee482dd781956e54a4e02ecfa8da202072fe6 (diff) | |
download | chromium_src-6e70b1981e49fc49ec51e9b82987cf4d692e4b8a.zip chromium_src-6e70b1981e49fc49ec51e9b82987cf4d692e4b8a.tar.gz chromium_src-6e70b1981e49fc49ec51e9b82987cf4d692e4b8a.tar.bz2 |
Enable task manager to kill NaCl windows processes, and fix crash throttling
The Chrome task manager on windows was unable to end NaCl processes because we failed
to add terminate rights to the browser handle when conveying it to the browser process.
NaClProcessHost previously caused a bad handle error when crash throttling occurred.
BUG= https://code.google.com/p/nativeclient/issues/detail?id=359
Review URL: https://chromiumcodereview.appspot.com/22824036
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@219344 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/nacl_host/nacl_process_host.cc | 19 | ||||
-rw-r--r-- | components/nacl/broker/nacl_broker_listener.cc | 3 |
2 files changed, 13 insertions, 9 deletions
diff --git a/chrome/browser/nacl_host/nacl_process_host.cc b/chrome/browser/nacl_host/nacl_process_host.cc index 1b4243d..492e06f 100644 --- a/chrome/browser/nacl_host/nacl_process_host.cc +++ b/chrome/browser/nacl_host/nacl_process_host.cc @@ -263,15 +263,18 @@ NaClProcessHost::NaClProcessHost(const GURL& manifest_url, } NaClProcessHost::~NaClProcessHost() { - int exit_code; - process_->GetTerminationStatus(&exit_code); - std::string message = - base::StringPrintf("NaCl process exited with status %i (0x%x)", + // Report exit status only if the process was successfully started. + if (process_->GetData().handle != base::kNullProcessHandle) { + int exit_code = 0; + process_->GetTerminationStatus(&exit_code); + std::string message = + base::StringPrintf("NaCl process exited with status %i (0x%x)", exit_code, exit_code); - if (exit_code == 0) { - LOG(INFO) << message; - } else { - LOG(ERROR) << message; + if (exit_code == 0) { + LOG(INFO) << message; + } else { + LOG(ERROR) << message; + } } if (internal_->socket_for_renderer != NACL_INVALID_HANDLE) { diff --git a/components/nacl/broker/nacl_broker_listener.cc b/components/nacl/broker/nacl_broker_listener.cc index cc365d6..18f41d3 100644 --- a/components/nacl/broker/nacl_broker_listener.cc +++ b/components/nacl/broker/nacl_broker_listener.cc @@ -107,7 +107,8 @@ void NaClBrokerListener::OnLaunchLoaderThroughBroker( if (loader_process) { DuplicateHandle(::GetCurrentProcess(), loader_process, browser_handle_, &loader_handle_in_browser, - PROCESS_DUP_HANDLE | PROCESS_QUERY_INFORMATION , FALSE, 0); + PROCESS_DUP_HANDLE | PROCESS_QUERY_INFORMATION | PROCESS_TERMINATE, + FALSE, 0); base::CloseProcessHandle(loader_process); } } |