Skip to content

Commit 9c3dc0e

Browse files
authored
Merge pull request #88 from clue-labs/cleanup-map
Improve performance by avoiding unneeded references in `FiberMap`
2 parents 16d653f + 221956d commit 9c3dc0e

File tree

2 files changed

+6
-31
lines changed

2 files changed

+6
-31
lines changed

src/FiberMap.php

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,9 @@
1111
*/
1212
final class FiberMap
1313
{
14-
/** @var array<int,bool> */
15-
private static array $status = [];
16-
1714
/** @var array<int,PromiseInterface<T>> */
1815
private static array $map = [];
1916

20-
/** @param \Fiber<mixed,mixed,mixed,mixed> $fiber */
21-
public static function register(\Fiber $fiber): void
22-
{
23-
self::$status[\spl_object_id($fiber)] = false;
24-
}
25-
26-
/** @param \Fiber<mixed,mixed,mixed,mixed> $fiber */
27-
public static function cancel(\Fiber $fiber): void
28-
{
29-
self::$status[\spl_object_id($fiber)] = true;
30-
}
31-
3217
/**
3318
* @param \Fiber<mixed,mixed,mixed,mixed> $fiber
3419
* @param PromiseInterface<T> $promise
@@ -40,9 +25,8 @@ public static function setPromise(\Fiber $fiber, PromiseInterface $promise): voi
4025

4126
/**
4227
* @param \Fiber<mixed,mixed,mixed,mixed> $fiber
43-
* @param PromiseInterface<T> $promise
4428
*/
45-
public static function unsetPromise(\Fiber $fiber, PromiseInterface $promise): void
29+
public static function unsetPromise(\Fiber $fiber): void
4630
{
4731
unset(self::$map[\spl_object_id($fiber)]);
4832
}
@@ -55,10 +39,4 @@ public static function getPromise(\Fiber $fiber): ?PromiseInterface
5539
{
5640
return self::$map[\spl_object_id($fiber)] ?? null;
5741
}
58-
59-
/** @param \Fiber<mixed,mixed,mixed,mixed> $fiber */
60-
public static function unregister(\Fiber $fiber): void
61-
{
62-
unset(self::$status[\spl_object_id($fiber)], self::$map[\spl_object_id($fiber)]);
63-
}
6442
}

src/functions.php

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -200,16 +200,13 @@ function async(callable $function): callable
200200
$reject($exception);
201201
} finally {
202202
assert($fiber instanceof \Fiber);
203-
FiberMap::unregister($fiber);
203+
FiberMap::unsetPromise($fiber);
204204
}
205205
});
206206

207-
FiberMap::register($fiber);
208-
209207
$fiber->start();
210208
}, function () use (&$fiber): void {
211209
assert($fiber instanceof \Fiber);
212-
FiberMap::cancel($fiber);
213210
$promise = FiberMap::getPromise($fiber);
214211
if ($promise instanceof PromiseInterface && \method_exists($promise, 'cancel')) {
215212
$promise->cancel();
@@ -294,9 +291,9 @@ function await(PromiseInterface $promise): mixed
294291
$lowLevelFiber = \Fiber::getCurrent();
295292

296293
$promise->then(
297-
function (mixed $value) use (&$resolved, &$resolvedValue, &$fiber, $lowLevelFiber, $promise): void {
294+
function (mixed $value) use (&$resolved, &$resolvedValue, &$fiber, $lowLevelFiber): void {
298295
if ($lowLevelFiber !== null) {
299-
FiberMap::unsetPromise($lowLevelFiber, $promise);
296+
FiberMap::unsetPromise($lowLevelFiber);
300297
}
301298

302299
/** @var ?\Fiber<mixed,mixed,mixed,mixed> $fiber */
@@ -309,9 +306,9 @@ function (mixed $value) use (&$resolved, &$resolvedValue, &$fiber, $lowLevelFibe
309306

310307
$fiber->resume($value);
311308
},
312-
function (mixed $throwable) use (&$rejected, &$rejectedThrowable, &$fiber, $lowLevelFiber, $promise): void {
309+
function (mixed $throwable) use (&$rejected, &$rejectedThrowable, &$fiber, $lowLevelFiber): void {
313310
if ($lowLevelFiber !== null) {
314-
FiberMap::unsetPromise($lowLevelFiber, $promise);
311+
FiberMap::unsetPromise($lowLevelFiber);
315312
}
316313

317314
if (!$throwable instanceof \Throwable) {

0 commit comments

Comments
 (0)