Skip to content

[bugfix] fix node exception notify miss#581

Merged
ChunelFeng merged 1 commit into
ChunelFeng:mainfrom
yeshenyong:fix/202602252352
Mar 1, 2026
Merged

[bugfix] fix node exception notify miss#581
ChunelFeng merged 1 commit into
ChunelFeng:mainfrom
yeshenyong:fix/202602252352

Conversation

@yeshenyong
Copy link
Copy Markdown
Collaborator

老代码

 else {
        // 遇到异常情况,结束整体逻辑
        CGRAPH_LOCK_GUARD lk(status_lock_);
        cur_status_ += curStatus;
        locker_.cv_.notify_one();
    }

新代码

 else {
        // 遇到异常情况,结束整体逻辑
        {
            CGRAPH_LOCK_GUARD lk(status_lock_);
            cur_status_ += curStatus;
        }
        CGRAPH_LOCK_GUARD lk(locker_.mtx_);
        locker_.cv_.notify_one();
    }

fatWait() 代码如下

CVoid GDynamicEngine::fatWait() {
    CGRAPH_UNIQUE_LOCK lock(locker_.mtx_);
    locker_.cv_.wait(lock, [this] {
        /**
         * 遇到以下条件之一,结束执行:
         * 1,执行结束
         * 2,状态异常
         */
        return (finished_end_size_ >= total_end_size_) || cur_status_.isErr();
    });
}
  1. 主线程 fatWait() 持有locker_.mtx_ 锁,还没出错
  2. Worker 线程执行 element 出错,获取status_lock_锁,设置 cur_status_为错误
  3. Worker notify(不需要 locker_.mtx_,也是问题所在)
  4. 但主线程此时没有进入wait 状态
  5. 主线程进入 wait,释放锁,阻塞
  6. 没有后续通知 -> 永久挂起

@ChunelFeng
Copy link
Copy Markdown
Owner

image

确认一下,这一行代码,是否必须?

@ChunelFeng ChunelFeng merged commit 99dbd11 into ChunelFeng:main Mar 1, 2026
35 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants