From de5b3562827f2662df11621cff3e55a717e55967 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Thu, 16 Feb 2023 09:12:55 +0100 Subject: [PATCH] python: Retry sd_bus_add_match() on EINTR This happens especially often on RHEL 8. --- src/cockpit/channels/dbus.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/cockpit/channels/dbus.py b/src/cockpit/channels/dbus.py index 1c8efc58871..0249ae92237 100644 --- a/src/cockpit/channels/dbus.py +++ b/src/cockpit/channels/dbus.py @@ -282,7 +282,15 @@ def filter_owner(message): func = handler r_string = ','.join(f"{key}='{value}'" for key, value in r.items()) if not self.is_closing(): - self.matches.append(self.bus.add_match(r_string, func)) + # this gets an EINTR very often especially on RHEL 8 + while True: + try: + match = self.bus.add_match(r_string, func) + break + except InterruptedError: + pass + + self.matches.append(match) def add_async_signal_handler(self, handler, **kwargs): def sync_handler(message):