diff --git a/src/DefaultWorker.php b/src/DefaultWorker.php index aa19e18..cfde05d 100644 --- a/src/DefaultWorker.php +++ b/src/DefaultWorker.php @@ -73,6 +73,8 @@ public function run(int $sleepTimer = 1000): void usleep($sleepFor * 1000); } + $this->shouldStop = false; + $this->logger?->debug('Worker stopped'); $this->eventDispatcher->dispatch(new WorkerStoppedEvent($this)); diff --git a/tests/Unit/DefaultWorkerTest.php b/tests/Unit/DefaultWorkerTest.php index 1249e1e..f063a64 100644 --- a/tests/Unit/DefaultWorkerTest.php +++ b/tests/Unit/DefaultWorkerTest.php @@ -275,4 +275,39 @@ static function ($stop) use (&$calls): void { self::assertSame(1, $calls); } + + public function testRunWorkerTwice(): void + { + $calls = 0; + + $worker = new DefaultWorker( + static function (callable $stop) use (&$calls): void { + $calls++; + $stop(); + }, + new EventDispatcher(), + ); + + $worker->run(0); + $worker->run(0); + + self::assertSame(2, $calls); + } + + public function testStopBeforeRun(): void + { + $calls = 0; + + $worker = new DefaultWorker( + static function () use (&$calls): void { + $calls++; + }, + new EventDispatcher(), + ); + + $worker->stop(); + $worker->run(0); + + self::assertSame(0, $calls); + } }