Index: chrome/common/service_process_util_posix.cc |
diff --git a/chrome/common/service_process_util_posix.cc b/chrome/common/service_process_util_posix.cc |
index 41780f8d370bfd3569597a6c158ad95c76a7c65b..95c92fbb5cdda51c05a35d5dc14542f1100105be 100644 |
--- a/chrome/common/service_process_util_posix.cc |
+++ b/chrome/common/service_process_util_posix.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/common/service_process_util_posix.h" |
#include "base/basictypes.h" |
+#include "base/bind.h" |
#include "base/eintr_wrapper.h" |
#include "base/message_loop_proxy.h" |
#include "base/synchronization/waitable_event.h" |
@@ -14,7 +15,7 @@ int g_signal_socket = -1; |
} |
ServiceProcessTerminateMonitor::ServiceProcessTerminateMonitor( |
- Task* terminate_task) |
+ const base::Closure& terminate_task) |
: terminate_task_(terminate_task) { |
} |
@@ -22,12 +23,12 @@ ServiceProcessTerminateMonitor::~ServiceProcessTerminateMonitor() { |
} |
void ServiceProcessTerminateMonitor::OnFileCanReadWithoutBlocking(int fd) { |
- if (terminate_task_.get()) { |
+ if (!terminate_task_.is_null()) { |
int buffer; |
int length = read(fd, &buffer, sizeof(buffer)); |
if ((length == sizeof(buffer)) && (buffer == kTerminateMessage)) { |
- terminate_task_->Run(); |
- terminate_task_.reset(); |
+ terminate_task_.Run(); |
+ terminate_task_.Reset(); |
} else if (length > 0) { |
DLOG(ERROR) << "Unexpected read: " << buffer; |
} else if (length == 0) { |
@@ -136,10 +137,10 @@ void ServiceProcessState::CreateState() { |
} |
bool ServiceProcessState::SignalReady( |
- base::MessageLoopProxy* message_loop_proxy, Task* terminate_task) { |
+ base::MessageLoopProxy* message_loop_proxy, |
+ const base::Closure& terminate_task) { |
DCHECK(state_); |
- scoped_ptr<Task> scoped_terminate_task(terminate_task); |
#if defined(OS_POSIX) && !defined(OS_MACOSX) |
state_->running_lock_.reset(TakeServiceRunningLock(true)); |
if (state_->running_lock_.get() == NULL) { |
@@ -147,7 +148,7 @@ bool ServiceProcessState::SignalReady( |
} |
#endif |
state_->terminate_monitor_.reset( |
- new ServiceProcessTerminateMonitor(scoped_terminate_task.release())); |
+ new ServiceProcessTerminateMonitor(terminate_task)); |
if (pipe(state_->sockets_) < 0) { |
DPLOG(ERROR) << "pipe"; |
return false; |
@@ -156,9 +157,10 @@ bool ServiceProcessState::SignalReady( |
bool success = false; |
message_loop_proxy->PostTask(FROM_HERE, |
- NewRunnableMethod(state_, &ServiceProcessState::StateData::SignalReady, |
- &signal_ready, |
- &success)); |
+ base::Bind(&ServiceProcessState::StateData::SignalReady, |
+ state_, |
+ &signal_ready, |
+ &success)); |
signal_ready.Wait(); |
return success; |
} |