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
This commit is contained in:
parent
bcddf743dd
commit
2532f0f5e6
@ -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
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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 *);
|
||||
|
Loading…
Reference in New Issue
Block a user