Merge branch 'release/3.3'

This commit is contained in:
Dylan K. Taylor
2018-10-10 13:45:31 +01:00
3 changed files with 80 additions and 4 deletions

View File

@ -248,12 +248,20 @@ class AsyncPool{
*/
public function collectTasks() : void{
foreach($this->tasks as $task){
if(!$task->isGarbage()){
$task->checkProgressUpdates();
}
$task->checkProgressUpdates();
if($task->isGarbage() and !$task->isRunning() and !$task->isCrashed()){
if(!$task->hasCancelledRun()){
try{
/*
* 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.
*
* 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
* lost. Thus, it's necessary to do one last check here to make sure all progress updates have
* been consumed before completing.
*/
$task->checkProgressUpdates();
$task->onCompletion();
}catch(\Throwable $e){
$this->logger->critical("Could not execute completion of asynchronous task " . (new \ReflectionClass($task))->getShortName() . ": " . $e->getMessage());