| 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 189fd7f27fd298da4ddd1dd1dae42e829c151735..4bb3a3d1a7d93e6193f8dd09cdfe5be2879d13ca 100644
|
| --- a/chrome/common/service_process_util_posix.cc
|
| +++ b/chrome/common/service_process_util_posix.cc
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -55,6 +55,7 @@ static void SigTermHandler(int sig, siginfo_t* info, void* uap) {
|
| ServiceProcessState::StateData::StateData() {}
|
|
|
| void ServiceProcessState::StateData::SignalReady() {
|
| + CHECK_EQ(g_signal_socket, -1);
|
| CHECK(MessageLoopForIO::current()->WatchFileDescriptor(
|
| sockets_[0], true, MessageLoopForIO::WATCH_READ,
|
| &watcher_, shut_down_monitor_.get()));
|
| @@ -94,8 +95,7 @@ bool ServiceProcessState::InitializeState() {
|
| bool ServiceProcessState::SignalReady(
|
| base::MessageLoopProxy* message_loop_proxy, Task* shutdown_task) {
|
| CHECK(state_);
|
| - CHECK_EQ(g_signal_socket, -1);
|
| -
|
| + scoped_ptr<Task> scoped_shutdown_task(shutdown_task);
|
| #if defined(OS_LINUX)
|
| state_->running_lock_.reset(TakeServiceRunningLock(true));
|
| if (state_->running_lock_.get() == NULL) {
|
| @@ -103,18 +103,23 @@ bool ServiceProcessState::SignalReady(
|
| }
|
| #endif // OS_LINUX
|
| state_->shut_down_monitor_.reset(
|
| - new ServiceProcessShutdownMonitor(shutdown_task));
|
| + new ServiceProcessShutdownMonitor(scoped_shutdown_task.release()));
|
| if (pipe(state_->sockets_) < 0) {
|
| PLOG(ERROR) << "pipe";
|
| return false;
|
| }
|
| +#if defined(OS_MACOSX)
|
| + state_->state_ = this;
|
| + message_loop_proxy->PostTask(FROM_HERE,
|
| + NewRunnableMethod(state_,
|
| + &ServiceProcessState::StateData::WatchExecutable));
|
| +#endif // OS_MACOSX
|
| message_loop_proxy->PostTask(FROM_HERE,
|
| NewRunnableMethod(state_, &ServiceProcessState::StateData::SignalReady));
|
| return true;
|
| }
|
|
|
| void ServiceProcessState::TearDownState() {
|
| - g_signal_socket = -1;
|
| if (state_) {
|
| if (state_->sockets_[0] != -1) {
|
| close(state_->sockets_[0]);
|
| @@ -127,6 +132,7 @@ void ServiceProcessState::TearDownState() {
|
| PLOG(ERROR) << "sigaction";
|
| }
|
| }
|
| + g_signal_socket = -1;
|
| state_->Release();
|
| state_ = NULL;
|
| }
|
|
|