X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bus%2Floop.c;h=ea0ec1065aa83fc3382552720a6c3d3926fe4cc1;hb=f587ce7845edb0eb01451368d01b5bc86b5904cd;hp=10614745329c986e15bb244a2642c33cea64c3ca;hpb=f05f87a825ab8ed5273674a7f65521ffc526f0d2;p=platform%2Fupstream%2Fdbus.git diff --git a/bus/loop.c b/bus/loop.c index 1061474..ea0ec10 100644 --- a/bus/loop.c +++ b/bus/loop.c @@ -294,9 +294,26 @@ bus_loop_iterate (dbus_bool_t block) bus_loop_quit (); goto next_iteration; } + + /* count enabled watches */ + n_fds = 0; + link = _dbus_list_get_first_link (&callbacks); + while (link != NULL) + { + DBusList *next = _dbus_list_get_next_link (&callbacks, link); + Callback *cb = link->data; + if (cb->type == CALLBACK_WATCH) + { + WatchCallback *wcb = WATCH_CALLBACK (cb); + + if (dbus_watch_get_enabled (wcb->watch)) + ++n_fds; + } - n_fds = watch_count; + link = next; + } + /* fill our array of fds and watches */ if (n_fds > 0) { fds = dbus_new0 (DBusPollFD, n_fds); @@ -323,18 +340,21 @@ bus_loop_iterate (dbus_bool_t block) { unsigned int flags; WatchCallback *wcb = WATCH_CALLBACK (cb); + + if (dbus_watch_get_enabled (wcb->watch)) + { + watches_for_fds[i] = wcb; - watches_for_fds[i] = wcb; - - flags = dbus_watch_get_flags (wcb->watch); + flags = dbus_watch_get_flags (wcb->watch); - fds[i].fd = dbus_watch_get_fd (wcb->watch); - if (flags & DBUS_WATCH_READABLE) - fds[i].events |= _DBUS_POLLIN; - if (flags & DBUS_WATCH_WRITABLE) - fds[i].events |= _DBUS_POLLOUT; + fds[i].fd = dbus_watch_get_fd (wcb->watch); + if (flags & DBUS_WATCH_READABLE) + fds[i].events |= _DBUS_POLLIN; + if (flags & DBUS_WATCH_WRITABLE) + fds[i].events |= _DBUS_POLLOUT; - ++i; + ++i; + } } link = next; @@ -359,7 +379,8 @@ bus_loop_iterate (dbus_bool_t block) DBusList *next = _dbus_list_get_next_link (&callbacks, link); Callback *cb = link->data; - if (cb->type == CALLBACK_TIMEOUT) + if (cb->type == CALLBACK_TIMEOUT && + dbus_timeout_get_enabled (TIMEOUT_CALLBACK (cb)->timeout)) { TimeoutCallback *tcb = TIMEOUT_CALLBACK (cb); unsigned long interval; @@ -427,7 +448,8 @@ bus_loop_iterate (dbus_bool_t block) if (exited) goto next_iteration; - if (cb->type == CALLBACK_TIMEOUT) + if (cb->type == CALLBACK_TIMEOUT && + dbus_timeout_get_enabled (TIMEOUT_CALLBACK (cb)->timeout)) { TimeoutCallback *tcb = TIMEOUT_CALLBACK (cb); unsigned long interval; @@ -513,7 +535,8 @@ bus_loop_iterate (dbus_bool_t block) * weird POLLFOO thing like POLLWRBAND */ - if (condition != 0) + if (condition != 0 && + dbus_watch_get_enabled (wcb->watch)) { (* wcb->function) (wcb->watch, condition,