浏览代码

task: fix mutex recursion when task awaiting other task ends

rdb 7 年之前
父节点
当前提交
d1845530aa
共有 1 个文件被更改,包括 6 次插入7 次删除
  1. 6 7
      panda/src/event/asyncTaskChain.cxx

+ 6 - 7
panda/src/event/asyncTaskChain.cxx

@@ -788,18 +788,17 @@ cleanup_task(AsyncTask *task, bool upon_death, bool clean_exit) {
 
   _manager->remove_task_by_name(task);
 
-  if (upon_death && task->set_future_state(clean_exit ? AsyncFuture::FS_finished
-                                                      : AsyncFuture::FS_cancelled)) {
-    task->notify_done(clean_exit);
-  }
-
-  task->_manager = nullptr;
-
   if (upon_death) {
     _manager->_lock.unlock();
+    if (task->set_future_state(clean_exit ? AsyncFuture::FS_finished
+                                          : AsyncFuture::FS_cancelled)) {
+      task->notify_done(clean_exit);
+    }
     task->upon_death(_manager, clean_exit);
     _manager->_lock.lock();
   }
+
+  task->_manager = nullptr;
 }
 
 /**