Вопрос
Когда я выполняю «dbus_connection_close», нужно ли мне очищать очередь сообщений?
Другими словами, нужно ли мне продолжать «dbus_connection_read_write_dispatch» до тех пор, пока я не получу индикацию «отключено», или безопасно прекратить отправку?
Обновлено: Мне нужно закрыть соединение с DBus чистым способом.Судя по чтению документации, вся очистка должна быть выполнена до «отмены ссылки» на соединение, и этот процесс, по моему мнению, не очень хорошо документирован.
Решение
После некоторого копания выяснилось, что существует два типа подключения:общий и частный.
Общее соединение не должен быть закрытым просто без ссылки.Кроме того, не похоже, что соединение должно быть очищено и отправлено. пока не исходящие сообщения должны быть доставлены.
В моем случае мне просто нужно было как можно скорее прекратить общение через DBus, не пытаясь спасти исходящие сообщения.
Таким образом, краткий ответ:НЕТ – промывка/отправка не требуется перед dbus_connection_unref
.
Другие советы
Смотрящий в документации для dbus_connection_close(), единственное, что может быть вызван — это функция состояния отправки, указывающая, что соединение закрыто.
Итак, заказывая здесь, это то, на что вы наверняка захотите обратить внимание..то есть получение уведомления о закрытом/разорванном соединении до того, как что-то останется в очереди сообщений.
Глядя на источник функции, похоже, единственное, что он собирается сделать, это вернуться в случае неудачи, т.е.неверное соединение/NULL-указатель.Иначе (кажется) просто зависнет.
Это означает, что да, вам, вероятно, следует очистить очередь сообщений перед тем, как повесить трубку.
Отказ от ответственности:Мне приходилось разговаривать с dbus всего несколько раз, я ни в коем случае не являюсь авторитетом в этом вопросе.