@@ -428,6 +428,7 @@ static void tearDownEventLoop(native_data_t *nat) {
428428#define EVENT_LOOP_EXIT 1
429429#define EVENT_LOOP_ADD 2
430430#define EVENT_LOOP_REMOVE 3
431+ #define EVENT_LOOP_WAKEUP 4
431432
432433dbus_bool_t dbusAddWatch (DBusWatch *watch, void *data) {
433434 native_data_t *nat = (native_data_t *)data;
@@ -472,6 +473,13 @@ void dbusToggleWatch(DBusWatch *watch, void *data) {
472473 }
473474}
474475
476+ void dbusWakeup (void *data) {
477+ native_data_t *nat = (native_data_t *)data;
478+
479+ char control = EVENT_LOOP_WAKEUP;
480+ write (nat->controlFdW , &control, sizeof (char ));
481+ }
482+
475483static void handleWatchAdd (native_data_t *nat) {
476484 DBusWatch *watch;
477485 int newFD;
@@ -555,6 +563,7 @@ static void *eventLoopMain(void *ptr) {
555563
556564 dbus_connection_set_watch_functions (nat->conn , dbusAddWatch,
557565 dbusRemoveWatch, dbusToggleWatch, ptr, NULL );
566+ dbus_connection_set_wakeup_main_function (nat->conn , dbusWakeup, ptr, NULL );
558567
559568 nat->running = true ;
560569
@@ -590,6 +599,11 @@ static void *eventLoopMain(void *ptr) {
590599 handleWatchRemove (nat);
591600 break ;
592601 }
602+ case EVENT_LOOP_WAKEUP:
603+ {
604+ // noop
605+ break ;
606+ }
593607 }
594608 }
595609 } else {
0 commit comments