我正在使用消息队列在服务器中进行线程间通信。该服务器在周四晚上按预期运行。当我在星期一选择备份项目时,它无法创建正在使用的六个队列中的两个,因为它们已经打开(O _
EXCL已设置)。这不应该是这种情况,但是我添加了一个带有错误检查的mq _
unlink调用,并从mq _
open中删除了O _
EXCL标志。
当我编译并运行时,erqno被mq _
unlink和mq _
打开设置为EEXIST。这应该是不可能的:mq _
unlink在任何情况下都不能将errno设置为EEXIST,并且mq _
open只能在O _
EXCL标志为0时设置EEXIST集。
为什么会发生这种情况?
答案 0 :(得分:3)
我认为这是一个Solaris错误。检查锁文件(通常是/var/tmp/.MQL/
...)并在知道消息队列未使用时将其删除。这应该允许unlink
成功。