mq_unlink 将 errno 设置为 EEXIST
我在服务器中使用消息队列进行线程间通信。 周四晚上,服务器按预期运行。 当我周一重新启动该项目时,它无法创建正在使用的六个队列中的两个,因为它们已经打开(O_
EXCL 已设置)。 情况不应该是这样,但尽管如此,我还是添加了一个带有错误检查的 mq_
unlink 调用,并从 mq_
中删除了 O_
EXCL 标志>打开。
当我编译并运行时,errno 被 mq_
unlink 和 mq_
open 设置为 EEXIST。 这应该是不可能发生的:mq_
unlink 在任何情况下都无法将 errno 设置为 EEXIST,而 mq_
open 只能在 O_
EXCL 标志已设置。
有什么想法为什么会发生这种情况吗?
I'm using message queues for inter-thread communication in a server. The server was functioning as expected on Thursday evening. When I picked the project back up on Monday, it was unable to create two of the six queues in use, citing that they were already open (O_
EXCL is set). This should not have been the case, but nevertheless I added an mq_
unlink call with error checking and removed the O_
EXCL flag from mq_
open.
When I compiled and ran, the errno was set to EEXIST by both mq_
unlink and mq_
open. This should be a can't happen: mq_
unlink can't set errno to EEXIST under any circumstances, and mq_
open can only set EEXIST when the O_
EXCL flag is set.
Any ideas why this is happening?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我相信这是一个 Solaris 错误。 检查锁定文件(通常是
/var/tmp/.MQL/
...),如果您知道消息队列未在使用,请将其删除。 这应该可以让取消链接
成功。I believe that this is a Solaris bug. Check for a lock file (usually
/var/tmp/.MQL/
...) and remove it if you know the message queue is not in use. That should allow theunlink
to succeed.