From d1366aca644d78f446f47b8fd607b82f73299fb8 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 8 Dec 2022 16:10:16 -1000 Subject: [PATCH] feat: speed up checking if a message needs a reply (#181) --- src/dbus_fast/message_bus.pxd | 3 +++ src/dbus_fast/message_bus.py | 13 ++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/dbus_fast/message_bus.pxd b/src/dbus_fast/message_bus.pxd index d3ea204..30a014d 100644 --- a/src/dbus_fast/message_bus.pxd +++ b/src/dbus_fast/message_bus.pxd @@ -10,9 +10,12 @@ cdef object MessageFlag cdef object MESSAGE_TYPE_CALL cdef object MESSAGE_TYPE_SIGNAL +cdef object NO_REPLY_EXPECTED_VALUE cdef object assert_object_path_valid cdef object assert_bus_name_valid +cdef _expects_reply(Message msg) + cdef class SendReply: cdef object _bus diff --git a/src/dbus_fast/message_bus.py b/src/dbus_fast/message_bus.py index 3dc9e3a..73a9d9a 100644 --- a/src/dbus_fast/message_bus.py +++ b/src/dbus_fast/message_bus.py @@ -27,6 +27,11 @@ from .validators import assert_bus_name_valid, assert_object_path_valid MESSAGE_TYPE_CALL = MessageType.METHOD_CALL MESSAGE_TYPE_SIGNAL = MessageType.SIGNAL +NO_REPLY_EXPECTED_VALUE = MessageFlag.NO_REPLY_EXPECTED.value + + +def _expects_reply(msg) -> bool: + return not (msg.flags.value & NO_REPLY_EXPECTED_VALUE) class SendReply: @@ -43,10 +48,8 @@ class SendReply: return self def __call__(self, reply: Message) -> None: - if self._msg.flags & MessageFlag.NO_REPLY_EXPECTED: - return - - self._bus.send(reply) + if _expects_reply(self._msg): + self._bus.send(reply) def _exit( self, @@ -753,7 +756,7 @@ class BaseMessageBus: self._name_owners[msg.destination] = reply.sender callback(reply, err) # type: ignore[misc] - no_reply_expected = msg.flags & MessageFlag.NO_REPLY_EXPECTED + no_reply_expected = not _expects_reply(msg) # Make sure the return reply handler is installed # before sending the message to avoid a race condition