Пример #1
0
void
process_subprocess_close(struct sol_flow_node *node, void *data)
{
    struct subprocess_data *mdata = data;

    if (mdata->fork_run)
        sol_platform_linux_fork_run_stop(mdata->fork_run);

    if (mdata->watches.in)
        sol_fd_del(mdata->watches.in);
    if (mdata->watches.err)
        sol_fd_del(mdata->watches.err);
    if (mdata->watches.out) {
        struct write_data *w;
        uint16_t i;

        sol_fd_del(mdata->watches.out);
        SOL_VECTOR_FOREACH_IDX (&mdata->write_data, w, i)
            sol_blob_unref(w->blob);
        sol_vector_clear(&mdata->write_data);
    }

    close(mdata->pipes.in[0]);
    close(mdata->pipes.in[1]);
    close(mdata->pipes.err[0]);
    close(mdata->pipes.err[1]);
    close(mdata->pipes.out[0]);
    close(mdata->pipes.out[1]);

    free(mdata->command);
}
static void
shutdown(void)
{
    if (!did_idle)
        SOL_WRN("failed to do idle");
    if (!did_timeout)
        SOL_WRN("failed to do timeout");
    if (!did_fd)
        SOL_WRN("failed to do fd");

    if (fork_run)
        sol_platform_linux_fork_run_stop(fork_run);

    if (pfd[0] > 0) {
        close(pfd[0]);
        close(pfd[1]);
    }

    if (!did_idle || !did_timeout || !did_fd)
        exit(EXIT_FAILURE);
}
Пример #3
0
static int
dbus_stop(const struct sol_platform_linux_micro_module *mod, const char *service, bool force_immediate)
{
    int err = 0;

    if (!fork_run)
        return 0;

    if (!force_immediate)
        err = sol_platform_linux_fork_run_send_signal(fork_run, SIGTERM);
    else {
        sol_platform_linux_fork_run_stop(fork_run);
        fork_run = NULL;
    }

    if (check_timeout) {
        sol_timeout_del(check_timeout);
        check_timeout = NULL;
    }

    return err;
}
Пример #4
0
static int
bluetooth_stop(const struct sol_platform_linux_micro_module *mod,
    const char *service,
    bool force_immediate)
{
    static const char *DBUS = "dbus";
    int err = 0;

    if (!fork_run)
        return 0;

    if (!force_immediate)
        err = sol_platform_linux_fork_run_send_signal(fork_run, SIGTERM);
    else {
        sol_platform_linux_fork_run_stop(fork_run);
        fork_run = NULL;
    }

    sol_platform_del_service_monitor
        (on_dbus_service_state_changed, DBUS, NULL);

    return err;
}