summaryrefslogtreecommitdiffstats
path: root/chrome/common/service_process_util_win.cc
diff options
context:
space:
mode:
authordmaclach@chromium.org <dmaclach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-25 13:49:51 +0000
committerdmaclach@chromium.org <dmaclach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-25 13:49:51 +0000
commit36d11e440238728c7854490485cc00c674a6e420 (patch)
tree10c676d4af78ec212ba64282272ea3d10c35a6eb /chrome/common/service_process_util_win.cc
parente384ce27922240f5670bd75b819a29dbba5f68ac (diff)
downloadchromium_src-36d11e440238728c7854490485cc00c674a6e420.zip
chromium_src-36d11e440238728c7854490485cc00c674a6e420.tar.gz
chromium_src-36d11e440238728c7854490485cc00c674a6e420.tar.bz2
Make the mac service process handling code clean itself up properly as far as launchd is concerned.
Note new documentation at https://sites.google.com/a/chromium.org/dev/developers/design-documents/service-processes BUG=None TEST= 1) Build. 2) Launch Chromium with cloud print disabled. 3) Start Terminal 4) launchctl list 5) You should not see any org.chromium.Chromium.framework.service_process/* processes listed 6) Go to Preferences in chromium 7) launchctl list 8) You should now see a org.chromium.Chromium.framework.service_process/* process 9) Quit chromium 10) launchctl list 11) There should not be any org.chromium.Chromium.framework.service_process/* processes anymore Review URL: http://codereview.chromium.org/7736002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98221 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/service_process_util_win.cc')
-rw-r--r--chrome/common/service_process_util_win.cc50
1 files changed, 26 insertions, 24 deletions
diff --git a/chrome/common/service_process_util_win.cc b/chrome/common/service_process_util_win.cc
index 2d5db85..b8e2d85 100644
--- a/chrome/common/service_process_util_win.cc
+++ b/chrome/common/service_process_util_win.cc
@@ -20,14 +20,16 @@
namespace {
+const char* kTerminateEventSuffix = "_service_terminate_evt";
+
string16 GetServiceProcessReadyEventName() {
return UTF8ToWide(
GetServiceProcessScopedVersionedName("_service_ready"));
}
-string16 GetServiceProcessShutdownEventName() {
+string16 GetServiceProcessTerminateEventName() {
return UTF8ToWide(
- GetServiceProcessScopedVersionedName("_service_shutdown_evt"));
+ GetServiceProcessScopedVersionedName(kTerminateEventSuffix));
}
std::string GetServiceProcessAutoRunKey() {
@@ -46,29 +48,29 @@ std::string GetObsoleteServiceProcessAutoRunKey() {
return scoped_name;
}
-class ServiceProcessShutdownMonitor
+class ServiceProcessTerminateMonitor
: public base::win::ObjectWatcher::Delegate {
public:
- explicit ServiceProcessShutdownMonitor(Task* shutdown_task)
- : shutdown_task_(shutdown_task) {
+ explicit ServiceProcessTerminateMonitor(Task* terminate_task)
+ : terminate_task_(terminate_task) {
}
void Start() {
- string16 event_name = GetServiceProcessShutdownEventName();
+ string16 event_name = GetServiceProcessTerminateEventName();
CHECK(event_name.length() <= MAX_PATH);
- shutdown_event_.Set(CreateEvent(NULL, TRUE, FALSE, event_name.c_str()));
- watcher_.StartWatching(shutdown_event_.Get(), this);
+ terminate_event_.Set(CreateEvent(NULL, TRUE, FALSE, event_name.c_str()));
+ watcher_.StartWatching(terminate_event_.Get(), this);
}
// base::ObjectWatcher::Delegate implementation.
virtual void OnObjectSignaled(HANDLE object) {
- shutdown_task_->Run();
- shutdown_task_.reset();
+ terminate_task_->Run();
+ terminate_task_.reset();
}
private:
- base::win::ScopedHandle shutdown_event_;
+ base::win::ScopedHandle terminate_event_;
base::win::ObjectWatcher watcher_;
- scoped_ptr<Task> shutdown_task_;
+ scoped_ptr<Task> terminate_task_;
};
} // namespace
@@ -80,15 +82,15 @@ IPC::ChannelHandle GetServiceProcessChannel() {
bool ForceServiceProcessShutdown(const std::string& version,
base::ProcessId process_id) {
- base::win::ScopedHandle shutdown_event;
+ base::win::ScopedHandle terminate_event;
std::string versioned_name = version;
- versioned_name.append("_service_shutdown_evt");
+ versioned_name.append(kTerminateEventSuffix);
string16 event_name =
UTF8ToWide(GetServiceProcessScopedName(versioned_name));
- shutdown_event.Set(OpenEvent(EVENT_MODIFY_STATE, FALSE, event_name.c_str()));
- if (!shutdown_event.IsValid())
+ terminate_event.Set(OpenEvent(EVENT_MODIFY_STATE, FALSE, event_name.c_str()));
+ if (!terminate_event.IsValid())
return false;
- SetEvent(shutdown_event.Get());
+ SetEvent(terminate_event.Get());
return true;
}
@@ -105,7 +107,7 @@ bool CheckServiceProcessReady() {
struct ServiceProcessState::StateData {
// An event that is signaled when a service process is ready.
base::win::ScopedHandle ready_event;
- scoped_ptr<ServiceProcessShutdownMonitor> shutdown_monitor;
+ scoped_ptr<ServiceProcessTerminateMonitor> terminate_monitor;
};
void ServiceProcessState::CreateState() {
@@ -129,17 +131,17 @@ bool ServiceProcessState::TakeSingletonLock() {
}
bool ServiceProcessState::SignalReady(
- base::MessageLoopProxy* message_loop_proxy, Task* shutdown_task) {
+ base::MessageLoopProxy* message_loop_proxy, Task* terminate_task) {
DCHECK(state_);
DCHECK(state_->ready_event.IsValid());
- scoped_ptr<Task> scoped_shutdown_task(shutdown_task);
+ scoped_ptr<Task> scoped_terminate_task(terminate_task);
if (!SetEvent(state_->ready_event.Get())) {
return false;
}
- if (shutdown_task) {
- state_->shutdown_monitor.reset(
- new ServiceProcessShutdownMonitor(scoped_shutdown_task.release()));
- state_->shutdown_monitor->Start();
+ if (terminate_task) {
+ state_->terminate_monitor.reset(
+ new ServiceProcessTerminateMonitor(scoped_terminate_task.release()));
+ state_->terminate_monitor->Start();
}
return true;
}