From 88c6dcf46d6b786b3a6e83bb3fd7f930ca089f31 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Wed, 6 May 2020 13:41:36 +0100 Subject: [PATCH] ChunkCache: clean up handling of cache cleanup on world unload --- src/network/mcpe/ChunkCache.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/network/mcpe/ChunkCache.php b/src/network/mcpe/ChunkCache.php index 128d5890b9..5985b9e3c7 100644 --- a/src/network/mcpe/ChunkCache.php +++ b/src/network/mcpe/ChunkCache.php @@ -51,6 +51,16 @@ class ChunkCache implements ChunkListener{ public static function getInstance(World $world, Compressor $compressor) : self{ $worldId = spl_object_id($world); $compressorId = spl_object_id($compressor); + if(!isset(self::$instances[$worldId])){ + self::$instances[$worldId] = []; + $world->addOnUnloadCallback(static function() use ($worldId) : void{ + foreach(self::$instances[$worldId] as $cache){ + $cache->caches = []; + } + unset(self::$instances[$worldId]); + \GlobalLogger::get()->debug("Destroyed chunk packet caches for world#$worldId"); + }); + } if(!isset(self::$instances[$worldId][$compressorId])){ \GlobalLogger::get()->debug("Created new chunk packet cache (world#$worldId, compressor#$compressorId)"); self::$instances[$worldId][$compressorId] = new self($world, $compressor); @@ -74,12 +84,6 @@ class ChunkCache implements ChunkListener{ private function __construct(World $world, Compressor $compressor){ $this->world = $world; $this->compressor = $compressor; - $worldId = spl_object_id($world); - $this->world->addOnUnloadCallback(function() use ($worldId) : void{ - $this->caches = []; - unset(self::$instances[$worldId]); - \GlobalLogger::get()->debug("Destroyed chunk packet caches for world#$worldId"); - }); } /**