AsyncTask: Rewrite how thread-local storage works, now non-dependent on Server or ServerScheduler

this implementation was god-awful bad and it was entirely avoidable to make it this complicated.

This utilizes the fact that pthreads treats static properties as thread-local. AsyncTask local storage now utilizes a \SplObjectStorage stored in an AsyncTask private static field.
This commit is contained in:
Dylan K. Taylor
2018-05-29 19:41:00 +01:00
parent 299e4c8a85
commit 81957d133d
5 changed files with 52 additions and 112 deletions

View File

@ -161,14 +161,14 @@ class AsyncPool{
if(!$task->hasCancelledRun()){
try{
$task->onCompletion($this->server);
if(!$this->server->getScheduler()->removeLocalComplex($task)){
if($task->removeDanglingStoredObjects()){
$this->server->getLogger()->notice("AsyncTask " . get_class($task) . " stored local complex data but did not remove them after completion");
}
}catch(\Throwable $e){
$this->server->getLogger()->critical("Could not execute completion of asynchronous task " . (new \ReflectionClass($task))->getShortName() . ": " . $e->getMessage());
$this->server->getLogger()->logException($e);
$this->server->getScheduler()->removeLocalComplex($task); //silent
$task->removeDanglingStoredObjects(); //silent
}
}