@@ -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