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; }
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; }
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); }