Page MenuHomePhabricator

D14452.id34960.diff
No OneTemporary

D14452.id34960.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -147,6 +147,7 @@
'PhutilDaemon' => 'daemon/PhutilDaemon.php',
'PhutilDaemonHandle' => 'daemon/PhutilDaemonHandle.php',
'PhutilDaemonOverseer' => 'daemon/PhutilDaemonOverseer.php',
+ 'PhutilDaemonOverseerModule' => 'daemon/PhutilDaemonOverseerModule.php',
'PhutilDefaultSyntaxHighlighter' => 'markup/syntax/highlighter/PhutilDefaultSyntaxHighlighter.php',
'PhutilDefaultSyntaxHighlighterEngine' => 'markup/syntax/engine/PhutilDefaultSyntaxHighlighterEngine.php',
'PhutilDefaultSyntaxHighlighterEnginePygmentsFuture' => 'markup/syntax/highlighter/pygments/PhutilDefaultSyntaxHighlighterEnginePygmentsFuture.php',
@@ -668,6 +669,7 @@
'PhutilDaemon' => 'Phobject',
'PhutilDaemonHandle' => 'Phobject',
'PhutilDaemonOverseer' => 'Phobject',
+ 'PhutilDaemonOverseerModule' => 'Phobject',
'PhutilDefaultSyntaxHighlighter' => 'Phobject',
'PhutilDefaultSyntaxHighlighterEngine' => 'PhutilSyntaxHighlighterEngine',
'PhutilDefaultSyntaxHighlighterEnginePygmentsFuture' => 'FutureProxy',
diff --git a/src/daemon/PhutilDaemonHandle.php b/src/daemon/PhutilDaemonHandle.php
--- a/src/daemon/PhutilDaemonHandle.php
+++ b/src/daemon/PhutilDaemonHandle.php
@@ -257,7 +257,7 @@
// explicitly delineate PID/PGIDs from signals. We don't actually need it,
// so use the implicit "kill -TERM -pgid" form instead of the explicit
// "kill -TERM -- -pgid" form.
- exec("kill -TERM -{$pgid}");
+ posix_kill($pgid, SIGTERM);
sleep($this->getKillDelay());
// On OSX, we'll get a permission error on stderr if the SIGTERM was
@@ -267,7 +267,7 @@
// groups that resist SIGTERM. Rather than trying to figure out if the
// process group is still around or not, just SIGKILL unconditionally and
// ignore any error which may be raised.
- exec("kill -KILL -{$pgid} 2>/dev/null");
+ posix_kill($pgid, SIGKILL);
$this->pid = null;
}
}
@@ -370,8 +370,7 @@
// naturally be restarted after it exits, as though it had exited after an
// unhandled exception.
- $pid = $this->pid;
- exec("kill -INT {$pid}");
+ posix_kill($this->pid, SIGINT);
}
public function didReceiveGracefulSignal($signo) {
@@ -396,8 +395,7 @@
$this->logMessage('DONE', $sigmsg, $signo);
- $pid = $this->pid;
- exec("kill -INT {$pid}");
+ posix_kill($this->pid, SIGINT);
}
public function didReceiveTerminalSignal($signo) {
diff --git a/src/daemon/PhutilDaemonOverseer.php b/src/daemon/PhutilDaemonOverseer.php
--- a/src/daemon/PhutilDaemonOverseer.php
+++ b/src/daemon/PhutilDaemonOverseer.php
@@ -19,6 +19,7 @@
private $piddir;
private $log;
private $libraries = array();
+ private $modules = array();
private $verbose;
private $err = 0;
private $lastPidfile;
@@ -145,6 +146,8 @@
}
}
+ $this->modules = PhutilDaemonOverseerModule::getAllModules();
+
declare(ticks = 1);
pcntl_signal(SIGUSR2, array($this, 'didReceiveNotifySignal'));
@@ -185,6 +188,12 @@
}
while (true) {
+ foreach ($this->modules as $module) {
+ if ($module->shouldRestartDaemons()) {
+ $this->didReceiveReloadSignal(SIGHUP);
+ }
+ }
+
$futures = array();
foreach ($this->getDaemonHandles() as $daemon) {
$daemon->update();
diff --git a/src/daemon/PhutilDaemonOverseerModule.php b/src/daemon/PhutilDaemonOverseerModule.php
new file mode 100644
--- /dev/null
+++ b/src/daemon/PhutilDaemonOverseerModule.php
@@ -0,0 +1,13 @@
+<?php
+
+abstract class PhutilDaemonOverseerModule extends Phobject {
+
+ public static function getAllModules() {
+ $modules = id(new PhutilClassMapQuery())
+ ->setAncestorClass(__CLASS__)
+ ->execute();
+ }
+
+ abstract public function shouldRestartDaemons();
+
+}

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 3, 6:32 AM (1 w, 15 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7730047
Default Alt Text
D14452.id34960.diff (3 KB)

Event Timeline