diff --git a/src/pocketmine/network/rcon/RCON.php b/src/pocketmine/network/rcon/RCON.php index dd739023a..c49bd2950 100644 --- a/src/pocketmine/network/rcon/RCON.php +++ b/src/pocketmine/network/rcon/RCON.php @@ -85,11 +85,15 @@ class RCON{ }elseif($this->workers[$n]->isWaiting()){ if($this->workers[$n]->response !== ""){ MainLogger::getLogger()->info($this->workers[$n]->response); - $this->workers[$n]->notify(); + $this->workers[$n]->synchronized(function($thread){ + $thread->notify(); + }, $this->workers[$n]); }else{ Server::getInstance()->dispatchCommand($response = new RemoteConsoleCommandSender(), $this->workers[$n]->cmd); $this->workers[$n]->response = TextFormat::clean($response->getMessage()); - $this->workers[$n]->notify(); + $this->workers[$n]->synchronized(function($thread){ + $thread->notify(); + }, $this->workers[$n]); } } } diff --git a/src/pocketmine/network/rcon/RCONInstance.php b/src/pocketmine/network/rcon/RCONInstance.php index ee2dc8946..fcf6aa461 100644 --- a/src/pocketmine/network/rcon/RCONInstance.php +++ b/src/pocketmine/network/rcon/RCONInstance.php @@ -133,7 +133,9 @@ class RCONInstance extends \Thread{ if($payload === $this->password){ @socket_getpeername($client, $addr, $port); $this->response = "[INFO] Successful Rcon connection from: /$addr:$port"; - $this->wait(); + $this->synchronized(function($thread){ + $thread->wait(); + }, $this); $this->response = ""; $this->writePacket($client, $requestID, 2, ""); $this->{"status" . $n} = 1; @@ -150,7 +152,9 @@ class RCONInstance extends \Thread{ } if(strlen($payload) > 0){ $this->cmd = ltrim($payload); - $this->wait(); + $this->synchronized(function($thread){ + $thread->wait(); + }, $this); $this->writePacket($client, $requestID, 0, str_replace("\n", "\r\n", trim($this->response))); $this->response = ""; $this->cmd = "";