Closed ye-xiaowei closed 3 weeks ago
在下面这种情况下是不是会出现死锁?
FSMCaller-Disruptor 线程 destroy Replicator,期间还有2个线程在等待 ThreadId 的锁释放
onTimeout()
onRpcReturned()
然后 destroy 完成,先唤醒了 ScheduleThreadPool,但是他不释放锁因为已经 destroyed
} finally { // Maybe destroyed in callback if (!this.destroyed) { this.lock.unlock(); } }
所以锁被Schedule线程持有没释放,send 线程就一直卡住了
java -version
uname -a
思考了下,确实有这个可能,这里应该无条件 unlock,不管是否 destroy
我也忘了当时为啥加这个检查了,可以提个 PR 来修复下。
嗯嗯
Your question
在下面这种情况下是不是会出现死锁?
FSMCaller-Disruptor 线程 destroy Replicator,期间还有2个线程在等待 ThreadId 的锁释放
onTimeout()
onRpcReturned()
然后 destroy 完成,先唤醒了 ScheduleThreadPool,但是他不释放锁因为已经 destroyed
所以锁被Schedule线程持有没释放,send 线程就一直卡住了
Environment
java -version
): 11uname -a
): win10