示例#1
0
static int test_ASYNC_get_wait_fd()
{
    ASYNC_JOB *job = NULL;
    int funcret;
    OSSL_ASYNC_FD fd;

    if (       !ASYNC_init(1, 1, 0)
            || ASYNC_start_job(&job, &funcret, wake, NULL, 0)
                != ASYNC_PAUSE
            || (fd = ASYNC_get_wait_fd(job)) < 0
            || hasdata(fd) != 0
            || ASYNC_start_job(&job, &funcret, save_current, NULL, 0)
                != ASYNC_PAUSE
            || hasdata(fd) != 1
            || (ASYNC_clear_wake(job), 0)
            || hasdata(fd) != 0
            || (ASYNC_wake(job), 0)
            || hasdata(fd) != 1
            || ASYNC_start_job(&job, &funcret, save_current, NULL, 0)
                != ASYNC_FINISH
            || funcret != 1) {
        fprintf(stderr, "test_ASYNC_get_wait_fd() failed\n");
        ASYNC_cleanup(1);
        return 0;
    }

    ASYNC_cleanup(1);
    return 1;
}
示例#2
0
static int wake(void *args)
{
    ASYNC_pause_job();
    ASYNC_wake(ASYNC_get_current_job());
    ASYNC_pause_job();
    ASYNC_clear_wake(ASYNC_get_current_job());

    return 1;
}
示例#3
0
static void dummy_pause_job(void) {
    ASYNC_JOB *job;

    if ((job = ASYNC_get_current_job()) == NULL)
        return;

    /*
     * In the Dummy async engine we are cheating. We signal that the job
     * is complete by waking it before the call to ASYNC_pause_job(). A real
     * async engine would only wake when the job was actually complete
     */
    ASYNC_wake(job);

    /* Ignore errors - we carry on anyway */
    ASYNC_pause_job();

    ASYNC_clear_wake(job);
}