https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93599
--- Comment #14 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The releases/gcc-9 branch has been updated by Thomas Kथघnig <tkoe...@gcc.gnu.org>: https://gcc.gnu.org/g:c080a6fb6f0cf402affc287fc600c189980cfb2d commit r9-8264-gc080a6fb6f0cf402affc287fc600c189980cfb2d Author: Thomas König <tkoe...@gcc.gnu.org> Date: Thu Feb 13 22:22:04 2020 +0100 Use au->lock exclusively for locking in async I/O. 2020-02-18 Thomas Koenig <tkoe...@gcc.gnu.org> Backport from trunk PR fortran/93599 * io/async.c (destroy_adv_cond): Do not destroy lock. (async_io): Make sure au->lock is locked for finishing of thread. Do not lock/unlock around signalling emptysignal. Unlock au->lock before return. (init_adv_cond): Do not initialize lock. (enqueue_transfer): Unlock after signal. (enqueue_done_id): Likewise. (enqueue_done): Likewise. (enqueue_close): Likewise. (enqueue_data_transfer): Likewise. (async_wait_id): Do not lock/unlock around signalling au->work. (async_wait): Unlock after signal. * io/async.h (SIGNAL): Add comment about needed au->lock. Remove locking/unlocking of advcond->lock. (WAIT_SIGNAL_MUTEX): Add comment. Remove locking/unlocking of advcond->lock. Unlock mutex only at the end. Loop on __ghread_cond_wait returning zero. (REVOKE_SIGNAL): Add comment. Remove locking/unlocking of advcond->lock. (struct adv_cond): Remove mutex from struct.