static void mainloop_quit(test_config_t *cfg) { switch (cfg->mainloop_type) { case MAINLOOP_NATIVE: mrp_mainloop_quit(cfg->ml, 0); break; case MAINLOOP_PULSE: pulse_mainloop_quit(cfg); break; case MAINLOOP_ECORE: ecore_mainloop_quit(cfg); break; case MAINLOOP_GLIB: glib_mainloop_quit(cfg); break; #ifdef QT_ENABLED case MAINLOOP_QT: qt_mainloop_quit(); break; #endif default: mrp_log_error("Invalid mainloop type 0x%x.", cfg->mainloop_type); exit(1); } }
static void pid_watch(pid_t pid, mrp_process_state_t s, void *userdata) { mrp_mainloop_t *ml = (mrp_mainloop_t *) userdata; printf("pid watch received event for %d: %s (%p)\n", pid, s == MRP_PROCESS_STATE_READY ? "ready" : "not ready", userdata); mrp_mainloop_quit(ml, 0); }
static void signal_handler(mrp_sighandler_t *h, int signum, void *user_data) { mrp_mainloop_t *ml = mrp_get_sighandler_mainloop(h); mrp_context_t *ctx = (mrp_context_t *)user_data; MRP_UNUSED(ctx); switch (signum) { case SIGINT: mrp_log_info("Got SIGINT, stopping..."); mrp_mainloop_quit(ml, 0); break; case SIGTERM: mrp_log_info("Got SIGTERM, stopping..."); mrp_mainloop_quit(ml, 0); break; } }
static void setup_dbus_client(mrp_mainloop_t *ml) { DBusConnection *conn; int i, nmethod, nsignal; size_t size; ssize_t amount_read; nmethod = cfg.ndbus_method; nsignal = cfg.ndbus_signal; mrp_clear(&cfg); cfg.ndbus_method = nmethod; cfg.ndbus_signal = nsignal; mrp_mainloop_quit(ml, 0); #ifdef GLIB_ENABLED glib_pump_cleanup(); #endif mrp_mainloop_destroy(ml); for (i = 3; i < 1024; i++) if (i != dbus_test.pipe[0]) close(i); size = sizeof(dbus_test.address) - 1; amount_read = read(dbus_test.pipe[0], dbus_test.address, size); if (amount_read > 0) { dbus_test.address[amount_read] = '\0'; info("DBUS test: got address '%s'", dbus_test.address); } /*sleep(5);*/ if ((ml = dbus_test.ml = mrp_mainloop_create()) == NULL) fatal("failed to create mainloop"); cfg.ml = ml; if ((conn = dbus_test.conn = connect_to_dbus(NULL)) == NULL) fatal("failed to connect to DBUS"); if (!mrp_setup_dbus_connection(ml, conn)) fatal("failed to setup DBUS connection with mainloop"); if (mrp_add_timer(ml, 1000, client_send_msg, NULL) == NULL) fatal("failed to create DBUS message sending timer"); if (mrp_add_timer(ml, 1000, check_quit, NULL) == NULL) fatal("failed to create quit-check timer"); cfg.nrunning++; }
static void handle_input(mrp_io_watch_t *watch, int fd, mrp_io_event_t events, void *user_data) { mrp_mainloop_t *ml = mrp_get_io_watch_mainloop(watch); char buf[1024]; int size; my_app_data *app_data = (my_app_data *) user_data; memset(buf, 0, sizeof(buf)); if (events & MRP_IO_EVENT_IN) { size = read(fd, buf, sizeof(buf) - 1); if (size > 0) { buf[size] = '\0'; printf("read line %s\n", buf); } } if (events & MRP_IO_EVENT_HUP) { mrp_del_io_watch(watch); } if (accept_input) { switch (buf[0]) { case 'C': create_resources(app_data); break; case 'A': acquire_resources(app_data); break; case 'D': giveup_resources(app_data); break; case 'Q': if (app_data->rs) mrp_res_delete_resource_set(app_data->rs); if (ml) mrp_mainloop_quit(ml, 0); break; default: printf("'C' to create resource set\n'A' to acquire\n'D' to release\n'Q' to quit\n"); break; } } else { printf("not connected to Murphy\n"); } }