summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsehr@chromium.org <sehr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-23 21:38:20 +0000
committersehr@chromium.org <sehr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-23 21:38:20 +0000
commit6e70b1981e49fc49ec51e9b82987cf4d692e4b8a (patch)
treef348d107187c393fbd12fd9774edebc44372b5c3
parent91aee482dd781956e54a4e02ecfa8da202072fe6 (diff)
downloadchromium_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.cc19
-rw-r--r--components/nacl/broker/nacl_broker_listener.cc3
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);
}
}