From 2532f0f5e60f7de0a06f3f824f6be618649c216b Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Wed, 22 Aug 2018 21:29:49 +0000 Subject: gfortran.texi: Mention that asynchronous I/O does not work on systems which lack condition... 2018-08-22 Thomas Koenig * gfortran.texi: Mention that asynchronous I/O does not work on systems which lack condition variables, such as AIX. 2018-08-22 Thomas Koenig * async.h: Set ASYNC_IO to zero if _AIX is defined. (struct adv_cond): If ASYNC_IO is zero, the struct has no members. (async_unit): If ASYNC_IO is zero, remove unneeded members. From-SVN: r263788 --- libgfortran/ChangeLog | 6 ++++++ libgfortran/io/async.h | 23 +++++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) (limited to 'libgfortran') diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 63d01e7..8f52118 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2018-08-22 Thomas Koenig + + * async.h: Set ASYNC_IO to zero if _AIX is defined. + (struct adv_cond): If ASYNC_IO is zero, the struct has no members. + (async_unit): If ASYNC_IO is zero, remove unneeded members. + 2018-08-21 Nicolas Koenig Thomas Koenig diff --git a/libgfortran/io/async.h b/libgfortran/io/async.h index 7dfbc8b..47081a1 100644 --- a/libgfortran/io/async.h +++ b/libgfortran/io/async.h @@ -29,7 +29,7 @@ __gthread_cond_t and __gthread_equal / __gthread_self. Check this. */ -#if defined(__GTHREAD_HAS_COND) && defined(__GTHREADS_CXX0X) +#if defined(__GTHREAD_HAS_COND) && defined(__GTHREADS_CXX0X) && !defined(_AIX) #define ASYNC_IO 1 #else #define ASYNC_IO 0 @@ -328,21 +328,18 @@ typedef union transfer_args struct adv_cond { +#if ASYNC_IO int pending; __gthread_mutex_t lock; __gthread_cond_t signal; +#endif }; typedef struct async_unit { - pthread_mutex_t lock; /* Lock for manipulating the queue structure. */ pthread_mutex_t io_lock; /* Lock for doing actual I/O. */ - struct adv_cond work; - struct adv_cond emptysignal; - struct st_parameter_dt *pdt; - pthread_t thread; - struct transfer_queue *head; - struct transfer_queue *tail; + pthread_mutex_t lock; /* Lock for manipulating the queue structure. */ + bool empty; struct { int waiting; @@ -351,7 +348,13 @@ typedef struct async_unit struct adv_cond done; } id; - bool empty; +#if ASYNC_IO + struct adv_cond work; + struct adv_cond emptysignal; + struct st_parameter_dt *pdt; + pthread_t thread; + struct transfer_queue *head; + struct transfer_queue *tail; struct { const char *message; @@ -361,7 +364,7 @@ typedef struct async_unit int family; bool fatal_error; } error; - +#endif } async_unit; void init_async_unit (gfc_unit *); -- cgit v1.1