2009-07-07 74 views
0

我正在使用消息隊列進行服務器內的線程間通信。服務器在週四晚上按預期運行。當我週一選擇了該項目時,它無法創建六個正在使用的隊列中的兩個,並指出它們已經打開(已設置O _ EXCL)。這不應該是這種情況,但是我添加了一個mq _取消鏈接調用並進行錯誤檢查,並從mq _打開刪除了O _ EXCL標誌。mq_unlink設置errno到EEXIST

當我編譯並運行時,errno被mq _ unlink和mq _打開設置爲EEXIST。這應該是一個不可能發生的事情:mq _在任何情況下,取消鏈接都不能將errno設置爲EEXIST,而當設置了O _ EXCL標誌時,打開的mq _只能設置EEXIST。

任何想法爲什麼會發生這種情況?

+0

愚蠢的問題,但電話實際上失敗?如果呼叫沒有失敗,你永遠不能依靠errno的價值。 – nos 2009-07-07 18:51:26

+1

是的,他們確實失敗了。 – Sean 2009-07-07 19:11:30

回答

3

我相信這是一個Solaris錯誤。檢查鎖定文件(通常爲/var/tmp/.MQL/ ...),如果知道消息隊列未被使用,請將其刪除。這應該允許unlink成功。