leo cheng

Results 3 comments of leo cheng

补充一点:我们在log_manager中做了callback业务代码的动作

> execution_queue_execute > 在LogManager::append_entries 里面,bthread::execution_queue_execute(_disk_queue, done) 提交磁盘任务,这里是异步的,提交任务后会立即返回,继续向下执行wakeup_all_waiter,这里会释放掉LogManager::_mutex,并返回到NodeImpl::handle_append_entries_request 释放掉NodeImpl::_mutex,应该是不会发生死锁。 execution_queue_execute是异步执行的没错,但新的bthread去申请 LogManager::_mutex就发生了死锁,所以肯定还是某个bthread 一直持有mutex没有释放,上面的thread bt也是这样

> bthread::pthread_mutex_lock_impl (mutex=) mutex 变量里有一个owner字段,是持有者的线程id,看一下这个线程在做什么 如上 我查看了所有死锁的thread mutex被占用情况 占用mutex的thread 也是lock_wait 所以才一直释放不出来