Skip to content

Commit 0c45a56

Browse files
committed
Use BlockingDriver within parallel workers
Prevents infinite spawning of workers if ParallelDriver is used within a worker.
1 parent 5bac9ec commit 0c45a56

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
"require": {
3535
"amphp/amp": "^2",
3636
"amphp/byte-stream": "^1",
37-
"amphp/parallel": "^0.1.5"
37+
"amphp/parallel": "^0.1.8"
3838
},
3939
"require-dev": {
4040
"amphp/phpunit-util": "^1",

lib/Internal/FileTask.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
*
1313
* @internal
1414
*/
15-
class FileTask extends BlockingDriver implements Task {
15+
class FileTask implements Task {
1616
const ENV_PREFIX = self::class . '#';
1717

1818
/** @var string */
@@ -142,7 +142,7 @@ public function run(Environment $environment) {
142142
case "ctime":
143143
case "get":
144144
case "put":
145-
return ([$this, $this->operation])(...$this->args);
145+
return ([new BlockingDriver, $this->operation])(...$this->args);
146146

147147
default:
148148
throw new \Error("Invalid operation");

lib/functions.php

+9
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ function filesystem(Driver $driver = null): Driver {
2222

2323
$driver = driver();
2424
}
25+
26+
if (\defined("AMP_WORKER") && $driver instanceof ParallelDriver) {
27+
throw new \Error("Cannot use the parallel driver within a worker");
28+
}
29+
2530
Loop::setState(LOOP_STATE_IDENTIFIER, $driver);
2631
return $driver;
2732
}
@@ -46,6 +51,10 @@ function driver(): Driver {
4651
return new BlockingDriver;
4752
}
4853

54+
if (\defined("AMP_WORKER")) { // Prevent spawning infinite workers.
55+
return new BlockingDriver;
56+
}
57+
4958
return new ParallelDriver;
5059
}
5160

0 commit comments

Comments
 (0)