aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io/async.h
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2018-08-22 21:29:49 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2018-08-22 21:29:49 +0000
commit2532f0f5e60f7de0a06f3f824f6be618649c216b (patch)
treeb91d1a612866680c53415ca99b53c32ffcde9d8b /libgfortran/io/async.h
parentbcddf743dd356082eca0a580881da0df683fe5ea (diff)
downloadgcc-2532f0f5e60f7de0a06f3f824f6be618649c216b.zip
gcc-2532f0f5e60f7de0a06f3f824f6be618649c216b.tar.gz
gcc-2532f0f5e60f7de0a06f3f824f6be618649c216b.tar.bz2
gfortran.texi: Mention that asynchronous I/O does not work on systems which lack condition...
2018-08-22 Thomas Koenig <tkoenig@gcc.gnu.org> * gfortran.texi: Mention that asynchronous I/O does not work on systems which lack condition variables, such as AIX. 2018-08-22 Thomas Koenig <tkoenig@gcc.gnu.org> * 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
Diffstat (limited to 'libgfortran/io/async.h')
-rw-r--r--libgfortran/io/async.h23
1 files changed, 13 insertions, 10 deletions
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 *);