mq_unlink 将 errno 设置为 EEXIST

发布于 2024-07-27 04:49:04 字数 475 浏览 3 评论 0原文

我在服务器中使用消息队列进行线程间通信。 周四晚上,服务器按预期运行。 当我周一重新启动该项目时,它无法创建正在使用的六个队列中的两个,因为它们已经打开(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

溇涏 2024-08-03 04:49:04

我相信这是一个 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 the unlink to succeed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文