task: fix mutex recursion when task awaiting other task ends

This commit is contained in:
rdb 2019-01-09 22:12:02 +01:00
parent e64a342a9f
commit d1845530aa

View File

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