cpp-ipc icon indicating copy to clipboard operation
cpp-ipc copied to clipboard

上报一个死锁的bug

Open ddm1233 opened this issue 3 years ago • 2 comments

非必现 场景: 进程 A 和 B 使用 channel 通信 windows10

进程A在获取large缓冲区时锁住的时候异常死掉了,导致后面再起来的A和B都会卡在获取锁的地方

acquire_storage

image

其他进程会在这个lock这里一直死等

image

image

另外延伸一下这个问题,当进程A收到ipc buff 但是异常没有释放,整个large 缓冲区就会一直被占用一个槽位了

作者大大这边有没什么好的解决方案,这两个问题的根源都是共享内存上的数据结构和进程生命周期无法关联。

ddm1233 avatar Oct 27 '22 12:10 ddm1233

spin lock。。记下来了,重构版本我想想有没有什么好办法。 到时候要不直接用 robust mutex,要不就想办法无锁。

large生命周期那个,必须想办法识别是否能真正回收,现在看起来似乎没什么好办法。不过确实是个问题,需要仔细思考下方案。

mutouyun avatar Oct 29 '22 11:10 mutouyun

作者大大可以试试用std::scoped_lock包装lock,这样进程崩掉或者函数抛异常也会释放锁

a5632645 avatar Apr 11 '23 02:04 a5632645