mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-07 02:08:21 +00:00
AsyncTask::setResult(): permit returning ThreadSafe objects to the main thread
this is now supported thanks to the object rescue feature implemented in pthreads 5.1, making returning of thread-safe values from async tasks possible. This needs to be explicitly supported, since otherwise it will attempt to serialize them, which isn't supported anymore.
This commit is contained in:
@ -25,6 +25,7 @@ namespace pocketmine\scheduler;
|
||||
|
||||
use pmmp\thread\Runnable;
|
||||
use pmmp\thread\Thread as NativeThread;
|
||||
use pmmp\thread\ThreadSafe;
|
||||
use pmmp\thread\ThreadSafeArray;
|
||||
use pocketmine\thread\NonThreadSafeValue;
|
||||
use function assert;
|
||||
@ -70,8 +71,7 @@ abstract class AsyncTask extends Runnable{
|
||||
/** @phpstan-var ThreadSafeArray<int, string> */
|
||||
public ThreadSafeArray $progressUpdates;
|
||||
|
||||
/** @phpstan-var NonThreadSafeValue<mixed>|string|int|bool|float|null */
|
||||
private NonThreadSafeValue|string|int|bool|null|float $result = null;
|
||||
private ThreadSafe|string|int|bool|null|float $result = null;
|
||||
private bool $cancelRun = false;
|
||||
private bool $submitted = false;
|
||||
|
||||
@ -124,7 +124,7 @@ abstract class AsyncTask extends Runnable{
|
||||
}
|
||||
|
||||
public function setResult(mixed $result) : void{
|
||||
$this->result = is_scalar($result) || is_null($result) ? $result : new NonThreadSafeValue($result);
|
||||
$this->result = is_scalar($result) || is_null($result) || $result instanceof ThreadSafe ? $result : new NonThreadSafeValue($result);
|
||||
}
|
||||
|
||||
public function cancelRun() : void{
|
||||
|
Reference in New Issue
Block a user