utils-jbus: handles EINTR
[src/app-framework-main.git] / src / utils-jbus.c
index e379921..7000009 100644 (file)
@@ -268,7 +268,9 @@ static DBusHandlerResult incoming_resp(DBusConnection *connection, DBusMessage *
        *prv = jrw->next;
 
        /* retrieve the string value */
-       if (!dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID)) {
+       if (dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID))
+               status = 0;
+       else {
                status = -1;
                str = NULL;
                reply = NULL;
@@ -689,9 +691,14 @@ int jbus_read_write_dispatch_multiple(struct jbus **jbuses, int njbuses, int tom
 
        r = jbus_dispatch_multiple(jbuses, njbuses, maxcount);
        n = jbus_fill_pollfds(jbuses, njbuses, fds);
-       s = poll(fds, n, toms);
-       if (s < 0)
-               return r ? r : s;
+       for(;;) {
+               s = poll(fds, n, toms);
+               if (s >= 0)
+                       break;
+               if (errno != EINTR)
+                       return r ? r : s;
+               toms = 0;
+       }
        n = jbus_dispatch_pollfds(jbuses, njbuses, fds, maxcount - r);
        return n >= 0 ? r + n : r ? r : n;
 }