X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=plugins%2Fafm-main-plugin%2Futils-jbus.c;h=67e3ce4ceac6957a6bdcccb362e8df254d285f24;hb=3a6db27dec6fee245708074c301b42e1cbedd716;hp=e379921c8a7caf1cf0a447f0af2917d30991310c;hpb=f1a75365067fb89dd293aa2c8e003c3b041a3c9a;p=src%2Fapp-framework-binder.git diff --git a/plugins/afm-main-plugin/utils-jbus.c b/plugins/afm-main-plugin/utils-jbus.c index e379921c..67e3ce4c 100644 --- a/plugins/afm-main-plugin/utils-jbus.c +++ b/plugins/afm-main-plugin/utils-jbus.c @@ -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; @@ -667,6 +669,7 @@ int jbus_dispatch_multiple(struct jbus **jbuses, int njbuses, int maxcount) for (i = r = 0 ; i < njbuses && r < maxcount ; i++) { dbus_connection_read_write(jbuses[i]->connection, 0); + sts = dbus_connection_get_dispatch_status(jbuses[i]->connection); while(sts == DBUS_DISPATCH_DATA_REMAINS && r < maxcount) { sts = dbus_connection_dispatch(jbuses[i]->connection); r++; @@ -688,10 +691,17 @@ int jbus_read_write_dispatch_multiple(struct jbus **jbuses, int njbuses, int tom assert(fds != NULL); r = jbus_dispatch_multiple(jbuses, njbuses, maxcount); + if (r) + return r; 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; }