diff --git a/modules/control/dbus/dbus.c b/modules/control/dbus/dbus.c
index 9a59f905a4fb53253ffa9c37b10824cefd913e95..f72c24fc1278d53ae8becdc93550beb8369129a9 100644
--- a/modules/control/dbus/dbus.c
+++ b/modules/control/dbus/dbus.c
@@ -954,8 +954,10 @@ static void *Run( void *data )
         /* Was the main loop woken up manually ? */
         if (fds[0].revents & POLLIN)
         {
-            char buf;
-            (void)read( fds[0].fd, &buf, 1 );
+            while (read(fds[0].fd, &(char){' '}, 1) == -1)
+            {
+                /* Only EINTR can happen here, so ignore the error. */
+            }
         }
 
         /* We need to lock the mutex while building lists of events,