Skip to content

Commit 72fb16e

Browse files
committed
Better initialization
1 parent 321e868 commit 72fb16e

1 file changed

Lines changed: 15 additions & 17 deletions

File tree

src/Process.php

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,7 @@ public static function start(
7171
$workingDirectory = $cwd;
7272
}
7373

74-
$driver = EventLoop::getDriver();
75-
76-
$runner = self::$driverRunner[$driver] ??= self::initialize();
74+
$runner = self::getRunner();
7775

7876
$context = $runner->start(
7977
$command,
@@ -87,39 +85,39 @@ public static function start(
8785
$streams = $context->streams;
8886

8987
$procHolder = new ProcHolder($runner, $handle);
88+
self::$procHolder[$procHolder] = $handle->pid;
9089

9190
self::$streamHolder[$streams->stdin] = $procHolder;
9291
self::$streamHolder[$streams->stdout] = $procHolder;
9392
self::$streamHolder[$streams->stderr] = $procHolder;
9493

95-
self::$procHolder[$procHolder] = $handle->pid;
96-
9794
return new self($runner, $handle, $streams, $command, $workingDirectory, $envVars, $options);
9895
}
9996

100-
private static function initialize(): ProcessRunner
97+
private static function getRunner(): ProcessRunner
10198
{
10299
/** @psalm-suppress RedundantPropertyInitializationCheck */
103-
self::$driverRunner ??= new \WeakMap();
100+
if (!isset(self::$driverRunner)) {
101+
self::$driverRunner = new \WeakMap();
102+
103+
\register_shutdown_function(static function (): void {
104+
/** @var ProcHolder $procHolder */
105+
foreach (self::$procHolder as $procHolder => $pid) {
106+
$procHolder->handle->wait();
107+
}
108+
});
109+
}
104110

105111
/** @psalm-suppress RedundantPropertyInitializationCheck */
106112
self::$procHolder ??= new \WeakMap();
107113

108114
/** @psalm-suppress RedundantPropertyInitializationCheck */
109115
self::$streamHolder ??= new \WeakMap();
110116

111-
$runner = \PHP_OS_FAMILY === 'Windows'
117+
$driver = EventLoop::getDriver();
118+
return self::$driverRunner[$driver] ??= \PHP_OS_FAMILY === 'Windows'
112119
? new WindowsProcessRunner()
113120
: new PosixProcessRunner();
114-
115-
\register_shutdown_function(static function (): void {
116-
/** @var ProcHolder $procHolder */
117-
foreach (self::$procHolder as $procHolder => $pid) {
118-
$procHolder->handle->wait();
119-
}
120-
});
121-
122-
return $runner;
123121
}
124122

125123
/**

0 commit comments

Comments
 (0)