if (!getMaintenanceMode())
return 0;
+ int ret = -1;
try {
- auto dispatch = [name, handler, data](dbus::Variant variant) {
- char *state = NULL;
- variant.get("(s)", &state);
-
- handler(name.c_str(), state, data);
- };
-
- dbus::signal::Receiver receiver(SIGNAL_OBJECT_PATH, SIGNAL_EVENT_INTERFACE);
- return receiver.subscribe(name, dispatch);
+ mainloop->dispatch([&]() {
+ auto task = [name, handler, data](dbus::Variant variant) {
+ char *state = NULL;
+ variant.get("(s)", &state);
+
+ handler(name.c_str(), state, data);
+ };
+
+ dbus::signal::Receiver receiver(SIGNAL_OBJECT_PATH, SIGNAL_EVENT_INTERFACE);
+ ret = receiver.subscribe(name, std::move(task));
+ });
+ return ret;
} catch (runtime::Exception& e) {
ERROR(e.what());
return -1;
return 0;
try {
- dbus::signal::Receiver receiver(SIGNAL_OBJECT_PATH, SIGNAL_EVENT_INTERFACE);
- receiver.unsubscribe(id);
+ mainloop->dispatch([&]() {
+ dbus::signal::Receiver receiver(SIGNAL_OBJECT_PATH, SIGNAL_EVENT_INTERFACE);
+ receiver.unsubscribe(id);
+ });
+
return 0;
} catch (runtime::Exception& e) {
ERROR(e.what());