|
@@ -55,6 +55,7 @@
|
|
|
|
|
|
#include <stddef.h>
|
|
|
|
|
|
+#include "atom/browser/browser.h"
|
|
|
#include "atom/common/atom_command_line.h"
|
|
|
|
|
|
#include "base/base_paths.h"
|
|
@@ -719,8 +720,7 @@ ProcessSingleton::ProcessSingleton(
|
|
|
const base::FilePath& user_data_dir,
|
|
|
const NotificationCallback& notification_callback)
|
|
|
: notification_callback_(notification_callback),
|
|
|
- current_pid_(base::GetCurrentProcId()),
|
|
|
- watcher_(new LinuxWatcher(this)) {
|
|
|
+ current_pid_(base::GetCurrentProcId()) {
|
|
|
// The user_data_dir may have not been created yet.
|
|
|
base::CreateDirectoryAndGetError(user_data_dir, nullptr);
|
|
|
|
|
@@ -881,6 +881,23 @@ ProcessSingleton::NotifyResult ProcessSingleton::NotifyOtherProcessOrCreate() {
|
|
|
base::TimeDelta::FromSeconds(kTimeoutInSeconds));
|
|
|
}
|
|
|
|
|
|
+void ProcessSingleton::StartListeningOnSocket() {
|
|
|
+ watcher_ = new LinuxWatcher(this);
|
|
|
+ BrowserThread::PostTask(
|
|
|
+ BrowserThread::IO,
|
|
|
+ FROM_HERE,
|
|
|
+ base::Bind(&ProcessSingleton::LinuxWatcher::StartListening,
|
|
|
+ watcher_,
|
|
|
+ sock_));
|
|
|
+}
|
|
|
+
|
|
|
+void ProcessSingleton::OnBrowserReady() {
|
|
|
+ if (listen_on_ready_) {
|
|
|
+ StartListeningOnSocket();
|
|
|
+ listen_on_ready_ = false;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
ProcessSingleton::NotifyResult
|
|
|
ProcessSingleton::NotifyOtherProcessWithTimeoutOrCreate(
|
|
|
const base::CommandLine& command_line,
|
|
@@ -1031,13 +1048,13 @@ bool ProcessSingleton::Create() {
|
|
|
if (listen(sock, 5) < 0)
|
|
|
NOTREACHED() << "listen failed: " << base::safe_strerror(errno);
|
|
|
|
|
|
- DCHECK(BrowserThread::IsMessageLoopValid(BrowserThread::IO));
|
|
|
- BrowserThread::PostTask(
|
|
|
- BrowserThread::IO,
|
|
|
- FROM_HERE,
|
|
|
- base::Bind(&ProcessSingleton::LinuxWatcher::StartListening,
|
|
|
- watcher_,
|
|
|
- sock));
|
|
|
+ sock_ = sock;
|
|
|
+
|
|
|
+ if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) {
|
|
|
+ StartListeningOnSocket();
|
|
|
+ } else {
|
|
|
+ listen_on_ready_ = true;
|
|
|
+ }
|
|
|
|
|
|
return true;
|
|
|
}
|