AsyncPool: reverse e0d5c79848335ae9335686fd896e593324f2b191, don't catch unexpected exceptions thrown by onCompletion()

this should never throw an uncaught exception, and if it does it indicates broken code.
This commit is contained in:
Dylan K. Taylor 2018-11-04 22:09:30 +00:00
parent 055ba6aa7c
commit 87b471ce0f

View File

@ -292,26 +292,19 @@ class AsyncPool{
$task->checkProgressUpdates($this->server); $task->checkProgressUpdates($this->server);
if($task->isGarbage() and !$task->isRunning() and !$task->isCrashed()){ if($task->isGarbage() and !$task->isRunning() and !$task->isCrashed()){
if(!$task->hasCancelledRun()){ if(!$task->hasCancelledRun()){
try{ /*
/* * It's possible for a task to submit a progress update and then finish before the progress
* It's possible for a task to submit a progress update and then finish before the progress * update is detected by the parent thread, so here we consume any missed updates.
* update is detected by the parent thread, so here we consume any missed updates. *
* * When this happens, it's possible for a progress update to arrive between the previous
* When this happens, it's possible for a progress update to arrive between the previous * checkProgressUpdates() call and the next isGarbage() call, causing progress updates to be
* checkProgressUpdates() call and the next isGarbage() call, causing progress updates to be * lost. Thus, it's necessary to do one last check here to make sure all progress updates have
* lost. Thus, it's necessary to do one last check here to make sure all progress updates have * been consumed before completing.
* been consumed before completing. */
*/ $task->checkProgressUpdates($this->server);
$task->checkProgressUpdates($this->server); $task->onCompletion($this->server);
$task->onCompletion($this->server); if($task->removeDanglingStoredObjects()){
if($task->removeDanglingStoredObjects()){ $this->logger->notice("AsyncTask " . get_class($task) . " stored local complex data but did not remove them after completion");
$this->logger->notice("AsyncTask " . get_class($task) . " stored local complex data but did not remove them after completion");
}
}catch(\Throwable $e){
$this->logger->critical("Could not execute completion of asynchronous task " . (new \ReflectionClass($task))->getShortName() . ": " . $e->getMessage());
$this->logger->logException($e);
$task->removeDanglingStoredObjects(); //silent
} }
} }