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

Unified Diff: chrome/nacl/nacl_broker_listener.cc

Issue 10211007: NaCl: Split the debug exception handler thread into a separate file (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use const on Closure Created 8 years, 8 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
« no previous file with comments | « chrome/nacl.gypi ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/nacl/nacl_broker_listener.cc
diff --git a/chrome/nacl/nacl_broker_listener.cc b/chrome/nacl/nacl_broker_listener.cc
index 8d1360001b61537c3d7a28c88e29465e139980e9..086f2a66c3fcdaa5b1b6b78c683dc9acee0ad7e0 100644
--- a/chrome/nacl/nacl_broker_listener.cc
+++ b/chrome/nacl/nacl_broker_listener.cc
@@ -11,13 +11,12 @@
#include "base/message_loop_proxy.h"
#include "base/path_service.h"
#include "base/process_util.h"
-#include "base/threading/platform_thread.h"
#include "chrome/common/nacl_cmd_line.h"
+#include "chrome/common/nacl_debug_exception_handler_win.h"
#include "chrome/common/nacl_messages.h"
#include "content/common/sandbox_policy.h"
#include "content/public/common/content_switches.h"
#include "ipc/ipc_switches.h"
-#include "native_client/src/trusted/service_runtime/win/debug_exception_handler.h"
namespace {
@@ -25,62 +24,6 @@ void SendReply(IPC::Channel* channel, int32 pid) {
channel->Send(new NaClProcessMsg_DebugExceptionHandlerLaunched(pid));
}
-class DebugExceptionHandler : public base::PlatformThread::Delegate {
- public:
- DebugExceptionHandler(base::MessageLoopProxy* message_loop,
- IPC::Channel* channel, int32 pid)
- : message_loop_(message_loop), channel_(channel), pid_(pid) {
- }
-
- virtual void ThreadMain() OVERRIDE {
- // In the Windows API, the set of processes being debugged is
- // thread-local, so we have to attach to the process (using
- // DebugActiveProcess()) on the same thread on which
- // NaClDebugLoop() receives debug events for the process.
- BOOL attached = false;
- base::ProcessHandle process_handle = base::kNullProcessHandle;
- if (!base::OpenProcessHandleWithAccess(
- pid_,
- base::kProcessAccessQueryInformation |
- base::kProcessAccessSuspendResume |
- base::kProcessAccessTerminate |
- base::kProcessAccessVMOperation |
- base::kProcessAccessVMRead |
- base::kProcessAccessVMWrite |
- base::kProcessAccessWaitForTermination,
- &process_handle)) {
- LOG(ERROR) << "Failed to get process handle";
- } else {
- attached = DebugActiveProcess(pid_);
- if (!attached) {
- LOG(ERROR) << "Failed to connect to the process";
- }
- }
- // At the moment we do not say in the reply whether attaching as a
- // debugger succeeded. In the future, when we attach on demand
- // when an exception handler is first registered, we can make the
- // NaCl syscall indicate whether attaching succeeded.
- message_loop_->PostDelayedTask(FROM_HERE,
- base::Bind(SendReply, channel_, pid_), base::TimeDelta());
-
- if (attached) {
- DWORD exit_code;
- NaClDebugLoop(process_handle, &exit_code);
- }
- if (process_handle != base::kNullProcessHandle) {
- base::CloseProcessHandle(process_handle);
- }
- delete this;
- }
-
- private:
- base::MessageLoopProxy* message_loop_;
- IPC::Channel* channel_;
- int32 pid_;
-
- DISALLOW_COPY_AND_ASSIGN(DebugExceptionHandler);
-};
-
} // namespace
NaClBrokerListener::NaClBrokerListener()
@@ -156,14 +99,9 @@ void NaClBrokerListener::OnLaunchLoaderThroughBroker(
}
void NaClBrokerListener::OnLaunchDebugExceptionHandler(int32 pid) {
- // The new PlatformThread will take ownership of the
- // DebugExceptionHandler object, which will delete itself on exit.
- DebugExceptionHandler* handler = new DebugExceptionHandler(
- base::MessageLoopProxy::current(), channel_.get(), pid);
- if (!base::PlatformThread::CreateNonJoinable(0, handler)) {
- SendReply(channel_.get(), pid);
- delete handler;
- }
+ base::Closure reply_sender(base::Bind(SendReply, channel_.get(), pid));
+ NaClStartDebugExceptionHandlerThread(pid, base::MessageLoopProxy::current(),
+ reply_sender);
}
void NaClBrokerListener::OnStopBroker() {
« no previous file with comments | « chrome/nacl.gypi ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698