diff --git a/src/pocketmine/PocketMine.php b/src/pocketmine/PocketMine.php index a0a959c68..6ad3cefc8 100644 --- a/src/pocketmine/PocketMine.php +++ b/src/pocketmine/PocketMine.php @@ -558,19 +558,7 @@ namespace pocketmine { $killer->start(); usleep(10000); //Fixes ServerKiller not being able to start on single-core machines - $erroredThreads = 0; - foreach(ThreadManager::getInstance()->getAll() as $id => $thread){ - $logger->debug("Stopping " . $thread->getThreadName() . " thread"); - try{ - $thread->quit(); - $logger->debug($thread->getThreadName() . " thread stopped successfully."); - }catch(\ThreadException $e){ - ++$erroredThreads; - $logger->debug("Could not stop " . $thread->getThreadName() . " thread: " . $e->getMessage()); - } - } - - if($erroredThreads > 0){ + if(ThreadManager::getInstance()->stopAll() > 0){ if(\pocketmine\DEBUG > 1){ echo "Some threads could not be stopped, performing a force-kill" . PHP_EOL . PHP_EOL; } diff --git a/src/pocketmine/ThreadManager.php b/src/pocketmine/ThreadManager.php index 195a7123e..1d615e6da 100644 --- a/src/pocketmine/ThreadManager.php +++ b/src/pocketmine/ThreadManager.php @@ -23,6 +23,8 @@ declare(strict_types=1); namespace pocketmine; +use pocketmine\utils\MainLogger; + class ThreadManager extends \Volatile{ /** @var ThreadManager */ @@ -68,4 +70,23 @@ class ThreadManager extends \Volatile{ return $array; } + + public function stopAll() : int{ + $logger = MainLogger::getLogger(); + + $erroredThreads = 0; + + foreach($this->getAll() as $thread){ + $logger->debug("Stopping " . $thread->getThreadName() . " thread"); + try{ + $thread->quit(); + $logger->debug($thread->getThreadName() . " thread stopped successfully."); + }catch(\ThreadException $e){ + ++$erroredThreads; + $logger->debug("Could not stop " . $thread->getThreadName() . " thread: " . $e->getMessage()); + } + } + + return $erroredThreads; + } } \ No newline at end of file