herr_t
ss_aio_init(void)
{
SS_ENTER_INIT;
#if defined(SSLIB_ASYNC_AIO)
if (0==ss_mpi_comm_rank(sslib_g.comm))
fprintf(sslib_g.warnings, "SSlib: using POSIX AIO for asynchronous I/O\n");
#elif defined(SSLIB_ASYNC_THREADS)
int en;
if (0==ss_mpi_comm_rank(sslib_g.comm))
fprintf(sslib_g.warnings, "SSlib: using POSIX threads for asynchronous I/O\n");
/* Initialize global data structures */
memset(&ss_aio_g, 0, sizeof ss_aio_g);
pthread_mutex_init(&(ss_aio_g.mutex), NULL);
pthread_cond_init(&(ss_aio_g.cond), NULL);
/* Start handler thread */
en = pthread_create(&(ss_aio_g.handler), NULL, ss_aio_handler_cb, NULL);
if (en) SS_ERROR_FMT(FAILED, ("pthread_created failed: %s", strerror(en)));
ss_aio_g.handler_started = TRUE;
SS_CLEANUP:
#else
if (0==ss_mpi_comm_rank(sslib_g.comm))
fprintf(sslib_g.warnings, "SSlib: faking asynchronous I/O\n");
#endif
SS_LEAVE(0);
}