@@ -486,6 +486,7 @@ static void tearDownEventLoop(native_data_t *nat) {
486486#define EVENT_LOOP_EXIT 1
487487#define EVENT_LOOP_ADD 2
488488#define EVENT_LOOP_REMOVE 3
489+ #define EVENT_LOOP_WAKEUP 4
489490
490491dbus_bool_t dbusAddWatch (DBusWatch *watch, void *data) {
491492 native_data_t *nat = (native_data_t *)data;
@@ -530,6 +531,13 @@ void dbusToggleWatch(DBusWatch *watch, void *data) {
530531 }
531532}
532533
534+ void dbusWakeup (void *data) {
535+ native_data_t *nat = (native_data_t *)data;
536+
537+ char control = EVENT_LOOP_WAKEUP ;
538+ write (nat->controlFdW , &control, sizeof (char ));
539+ }
540+
533541static void handleWatchAdd (native_data_t *nat) {
534542 DBusWatch *watch;
535543 int newFD;
@@ -613,6 +621,7 @@ static void *eventLoopMain(void *ptr) {
613621
614622 dbus_connection_set_watch_functions (nat->conn , dbusAddWatch,
615623 dbusRemoveWatch, dbusToggleWatch, ptr, NULL );
624+ dbus_connection_set_wakeup_main_function (nat->conn , dbusWakeup, ptr, NULL );
616625
617626 nat->running = true ;
618627
@@ -648,6 +657,11 @@ static void *eventLoopMain(void *ptr) {
648657 handleWatchRemove (nat);
649658 break ;
650659 }
660+ case EVENT_LOOP_WAKEUP :
661+ {
662+ // noop
663+ break ;
664+ }
651665 }
652666 }
653667 } else {
0 commit comments