1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 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);
 }