2009-11-02 82 views
3

当我执行“dbus_connection_close”时,是否需要刷新消息队列?dbus:刷新连接?

换句话说,我是否需要继续“dbus_connection_read_write_dispatch”,直到收到“断开连接”指示或停止调度安全为止?

更新:我需要以干净的方式关闭与DBus的连接。从阅读文件中,所有的清理工作必须在“未参考”连接之前完成,并且这个过程没有很好地记录IMO。

回答

2

经过一番深入挖掘,看起来有两种类型的连接:共享和私有。

共享连接一定不能被关闭只是未参考。此外,看起来连接必须被刷新&调度,除非传出的消息必须传递。

就我而言,我只是需要尽快结束DBus上的通信,而不尝试挽救任何传出的消息。

因此,简短的回答是:否 - 在dbus_connection_unref之前不需要冲水/不需要调度。

0

寻找at the documentation for dbus_connection_close(),唯一may be invoked是调度状态函数来指示连接已关闭。

因此,在这里订购是您可能要注意的事情。即在留在消息队列中的东西之前收到关闭/断开连接的通知。

看看source of the function,看起来它唯一要做的就是返回失败,即无效连接/空指针。否则,它(似乎)只是挂断电话。

这意味着是的,你可能应该在挂断之前刷新消息队列。

免责声明:我只需要跟dbus聊几次,我绝对不是一个权威人士。

+0

我的问题实际上是相反的:我需要关闭与DBus的连接,并确保我执行必要的清理。 – jldupont 2009-11-02 14:05:17

+0

@jldupont:那么是的,你应该刷新消息队列。我会编辑我的答案更明显。 – 2009-11-02 14:07:01

+0

@tinkertim:谢谢你的努力。 – jldupont 2009-11-05 15:00:13