Exemple #1
0
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);
    }
}
Exemple #2
0
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);
}
Exemple #3
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;
    }
}
Exemple #4
0
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++;
}
Exemple #5
0
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");
   }
}