Skip to content

Commit

Permalink
Cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
trowski committed Nov 19, 2023
1 parent 71fe5cf commit 28c58a6
Showing 1 changed file with 40 additions and 46 deletions.
86 changes: 40 additions & 46 deletions test/Driver/DriverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -472,32 +472,37 @@ public function testNoMemoryLeak(string $type, array $args): void
self::markTestSkipped('Skip on Windows for now, investigate');
}

$runs = 2000;

if ($type === "onSignal") {
$this->checkForSignalCapability();
}

$this->start(function (Driver $loop) use ($type, $args, $runs) {
$this->start(function (Driver $loop) use ($type, $args): void {
$runs = 2000;

$initialMem = \memory_get_usage();
$cb = static function ($runs) use ($loop, $type, $args): void {
$func = [$loop, $type];
for ($callbacks = [], $i = 0; $i < $runs; $i++) {
$callbacks[] = $func(...$args);
}

foreach ($callbacks as $callback) {
$loop->cancel($callback);
}

for ($callbacks = [], $i = 0; $i < $runs; $i++) {
$callbacks[] = $func(...$args);
}

foreach ($callbacks as $callback) {
$loop->disable($callback);
$loop->cancel($callback);
}

for ($callbacks = [], $i = 0; $i < $runs; $i++) {
$callbacks[] = $func(...$args);
}

if ($type === "repeat") {
$loop->delay(0.007, function () use ($loop, $callbacks): void {
foreach ($callbacks as $callback) {
Expand All @@ -511,33 +516,29 @@ public function testNoMemoryLeak(string $type, array $args): void
}
});
}

$loop->run();
if ($type === "defer") {
$loop->defer($fn = static function () use (&$fn, $loop, $runs): void {

match ($type) {
"defer" => $loop->defer($fn = static function () use (&$fn, $loop, $runs): void {
static $i = null;

$i = $i ?? $runs;

if ($i--) {
$loop->defer($fn);
}
});
$loop->run();
}
if ($type === "delay") {
$loop->delay(0, $fn = static function () use (&$fn, $loop, $runs): void {
}),
"delay" => $loop->delay(0, $fn = static function () use (&$fn, $loop, $runs): void {
static $i = null;

$i = $i ?? $runs;

if ($i--) {
$loop->delay(0, $fn);
}
});
$loop->run();
}
if ($type === "repeat") {
$loop->repeat(0, $fn = static function ($callbackId) use (&$fn, $loop, $runs): void {
}),
"repeat" => $loop->repeat(0, $fn = static function ($callbackId) use (&$fn, $loop, $runs): void {
static $i = null;

$i = $i ?? $runs;
Expand All @@ -546,11 +547,8 @@ public function testNoMemoryLeak(string $type, array $args): void
if ($i--) {
$loop->repeat(0, $fn);
}
});
$loop->run();
}
if ($type === "onWritable") {
$loop->defer(static function ($callbackId) use ($loop, $runs): void {
}),
"onReadable", "onWritable" => $loop->defer(static function ($callbackId) use ($loop, $runs): void {
$fn = static function ($callbackId, $socket) use (&$fn, $loop, $runs): void {
static $i = null;

Expand All @@ -577,46 +575,42 @@ public function testNoMemoryLeak(string $type, array $args): void
};

$fn($callbackId, null);
});
$loop->run();
}
if ($type === "onSignal") {
$sendSignal = static function (): void {
\posix_kill(\getmypid(), \SIGUSR1);
};
$loop->onSignal(
\SIGUSR1,
$fn = static function ($callbackId) use (&$fn, $loop, $sendSignal, $runs): void {
static $i = null;
}),
"onSignal" => $loop->defer(function () use ($loop, $runs): void {
$sendSignal = static function (): void {
\posix_kill(\getmypid(), \SIGUSR1);
};
$loop->onSignal(
\SIGUSR1,
$fn = static function ($callbackId) use (&$fn, $loop, $sendSignal, $runs): void {
static $i = null;

$i = $i ?? $runs;
$i = $i ?? $runs;

if ($i--) {
$loop->onSignal(\SIGUSR1, $fn);
$loop->delay(0, $sendSignal);
if ($i--) {
$loop->onSignal(\SIGUSR1, $fn);
$loop->delay(0, $sendSignal);
}
$loop->cancel($callbackId);
}
$loop->cancel($callbackId);
}
);
$loop->delay(0, $sendSignal);
$loop->run();
}
);
$loop->delay(0, $sendSignal);
}),
};

$loop->run();
};

$closureMem = \memory_get_usage() - $initialMem;
$cb($runs); /* just to set up eventual structures inside loop without counting towards memory comparison */

\gc_collect_cycles();

$initialMem = \memory_get_usage() - $closureMem;

$cb($runs);
unset($cb);

\gc_collect_cycles();

$loop->delay(0, fn() => null);
$loop->run();

$endMem = \memory_get_usage();

/* this is allowing some memory usage due to runtime caches etc., but nothing actually leaking */
Expand Down

0 comments on commit 28c58a6

Please sign in to comment.