gfortran.texi: Mention that asynchronous I/O does not work on systems which lack...
authorThomas Koenig <tkoenig@gcc.gnu.org>
Wed, 22 Aug 2018 21:29:49 +0000 (21:29 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Wed, 22 Aug 2018 21:29:49 +0000 (21:29 +0000)
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

gcc/fortran/ChangeLog
gcc/fortran/gfortran.texi
libgfortran/ChangeLog
libgfortran/io/async.h

index 6bbf99c0e058f8516ffbb88c6cb46850fd21142e..56e9c952795849522dc143982602c2a1520f2bd1 100644 (file)
@@ -1,3 +1,9 @@
+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  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/86935
index 0f3f454ff83692a9c0008817d697cf55fbed33f2..30934046a49f78c07ea4888ab5f6289660298b05 100644 (file)
@@ -1509,7 +1509,8 @@ end program main
 
 Asynchronous I/O is supported if the program is linked against the
 POSIX thread library. If that is not the case, all I/O is performed
-as synchronous.
+as synchronous. On systems which do not support pthread condition
+variables, such as AIX, I/O is also performed as synchronous.
 
 On some systems, such as Darwin or Solaris, the POSIX thread library
 is always linked in, so asynchronous I/O is always performed. On other
index 63d01e705adb8ea99ca4bd0951466cd8eebf76b7..8f5211866acab1cc0b711abd6369bc146f1dc811 100644 (file)
@@ -1,3 +1,9 @@
+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.
+
 2018-08-21  Nicolas Koenig  <koenigni@gcc.gnu.org>
        Thomas Koenig <tkoenig@gcc.gnu.org>
 
index 7dfbc8bd696d155726c707ba595135ff0486fe54..47081a151519fa911c2ce9eee08c8daebc249a82 100644 (file)
@@ -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 *);