NetworkSession: improve GC performance without crashing everything

this is necessary because some handlers have circular references to the session, which causes GC lag collecting them. This change allows them to be collected immediately without nuking internal state.
This commit is contained in:
Dylan K. Taylor 2019-05-06 16:43:05 +01:00
parent 5250a432d1
commit 685481b172

View File

@ -36,6 +36,7 @@ use pocketmine\network\BadPacketException;
use pocketmine\network\mcpe\handler\DeathSessionHandler; use pocketmine\network\mcpe\handler\DeathSessionHandler;
use pocketmine\network\mcpe\handler\HandshakeSessionHandler; use pocketmine\network\mcpe\handler\HandshakeSessionHandler;
use pocketmine\network\mcpe\handler\LoginSessionHandler; use pocketmine\network\mcpe\handler\LoginSessionHandler;
use pocketmine\network\mcpe\handler\NullSessionHandler;
use pocketmine\network\mcpe\handler\PreSpawnSessionHandler; use pocketmine\network\mcpe\handler\PreSpawnSessionHandler;
use pocketmine\network\mcpe\handler\ResourcePacksSessionHandler; use pocketmine\network\mcpe\handler\ResourcePacksSessionHandler;
use pocketmine\network\mcpe\handler\SessionHandler; use pocketmine\network\mcpe\handler\SessionHandler;
@ -419,6 +420,7 @@ class NetworkSession{
$this->disconnectGuard = true; $this->disconnectGuard = true;
$func(); $func();
$this->disconnectGuard = false; $this->disconnectGuard = false;
$this->setHandler(new NullSessionHandler());
$this->connected = false; $this->connected = false;
$this->manager->remove($this); $this->manager->remove($this);
} }