AsyncWorker: clean up nonsensical sleeper notifier handling code

This commit is contained in:
Dylan K. Taylor 2023-12-21 12:38:51 +00:00
parent bf99917f2a
commit c05116849a
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
2 changed files with 7 additions and 12 deletions

View File

@ -24,12 +24,10 @@ declare(strict_types=1);
namespace pocketmine\scheduler; namespace pocketmine\scheduler;
use pmmp\thread\Runnable; use pmmp\thread\Runnable;
use pmmp\thread\Thread as NativeThread;
use pmmp\thread\ThreadSafe; use pmmp\thread\ThreadSafe;
use pmmp\thread\ThreadSafeArray; use pmmp\thread\ThreadSafeArray;
use pocketmine\thread\NonThreadSafeValue; use pocketmine\thread\NonThreadSafeValue;
use function array_key_exists; use function array_key_exists;
use function assert;
use function igbinary_serialize; use function igbinary_serialize;
use function igbinary_unserialize; use function igbinary_unserialize;
use function is_null; use function is_null;
@ -83,9 +81,7 @@ abstract class AsyncTask extends Runnable{
$this->onRun(); $this->onRun();
$this->finished = true; $this->finished = true;
$worker = NativeThread::getCurrentThread(); AsyncWorker::getNotifier()->wakeupSleeper();
assert($worker instanceof AsyncWorker);
$worker->getNotifier()->wakeupSleeper();
} }
/** /**

View File

@ -36,7 +36,7 @@ class AsyncWorker extends Worker{
/** @var mixed[] */ /** @var mixed[] */
private static array $store = []; private static array $store = [];
private const TLS_KEY_NOTIFIER = self::class . "::notifier"; private static ?SleeperNotifier $notifier = null;
public function __construct( public function __construct(
private ThreadSafeLogger $logger, private ThreadSafeLogger $logger,
@ -45,12 +45,11 @@ class AsyncWorker extends Worker{
private SleeperHandlerEntry $sleeperEntry private SleeperHandlerEntry $sleeperEntry
){} ){}
public function getNotifier() : SleeperNotifier{ public static function getNotifier() : SleeperNotifier{
$notifier = $this->getFromThreadStore(self::TLS_KEY_NOTIFIER); if(self::$notifier !== null){
if(!$notifier instanceof SleeperNotifier){ return self::$notifier;
throw new AssumptionFailedError("SleeperNotifier not found in thread-local storage");
} }
return $notifier; throw new AssumptionFailedError("SleeperNotifier not found in thread-local storage");
} }
protected function onRun() : void{ protected function onRun() : void{
@ -66,7 +65,7 @@ class AsyncWorker extends Worker{
$this->logger->debug("No memory limit set"); $this->logger->debug("No memory limit set");
} }
$this->saveToThreadStore(self::TLS_KEY_NOTIFIER, $this->sleeperEntry->createNotifier()); self::$notifier = $this->sleeperEntry->createNotifier();
} }
public function getLogger() : ThreadSafeLogger{ public function getLogger() : ThreadSafeLogger{