diff --git a/src/pocketmine/level/generator/GeneratorUnregisterTask.php b/src/pocketmine/level/generator/GeneratorUnregisterTask.php index 18d052290..780268cac 100644 --- a/src/pocketmine/level/generator/GeneratorUnregisterTask.php +++ b/src/pocketmine/level/generator/GeneratorUnregisterTask.php @@ -35,7 +35,7 @@ class GeneratorUnregisterTask extends AsyncTask{ } public function onRun(){ - $this->saveToThreadStore("generation.level{$this->levelId}.manager", null); - $this->saveToThreadStore("generation.level{$this->levelId}.generator", null); + $this->removeFromThreadStore("generation.level{$this->levelId}.manager"); + $this->removeFromThreadStore("generation.level{$this->levelId}.generator"); } } diff --git a/src/pocketmine/scheduler/AsyncTask.php b/src/pocketmine/scheduler/AsyncTask.php index c26b80f11..5adde88a9 100644 --- a/src/pocketmine/scheduler/AsyncTask.php +++ b/src/pocketmine/scheduler/AsyncTask.php @@ -151,6 +151,18 @@ abstract class AsyncTask extends Collectable{ $this->worker->saveToThreadStore($identifier, $value); } + /** + * @see AsyncWorker::removeFromThreadStore() + * + * @param string $identifier + */ + public function removeFromThreadStore(string $identifier) : void{ + if($this->worker === null or $this->isGarbage()){ + throw new \BadMethodCallException("Objects can only be removed from AsyncWorker thread-local storage during task execution"); + } + $this->worker->removeFromThreadStore($identifier); + } + /** * Actions to execute when run * diff --git a/src/pocketmine/scheduler/AsyncWorker.php b/src/pocketmine/scheduler/AsyncWorker.php index b9adfa66b..3baa046c7 100644 --- a/src/pocketmine/scheduler/AsyncWorker.php +++ b/src/pocketmine/scheduler/AsyncWorker.php @@ -98,4 +98,13 @@ class AsyncWorker extends Worker{ public function getFromThreadStore(string $identifier){ return self::$store[$identifier] ?? null; } + + /** + * Removes previously-stored mixed data from the worker's thread-local object store. + * + * @param string $identifier + */ + public function removeFromThreadStore(string $identifier) : void{ + unset(self::$store[$identifier]); + } }