https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100352
--- Comment #4 from Tom de Vries <vries at gcc dot gnu.org> --- Going through the lock lifetime using backtraces: ... (gdb) watch ((pthread_mutex_t *) 0x6059d0)->__data.__lock Hardware watchpoint 2: ((pthread_mutex_t *) 0x6059d0)->__data.__lock ... I. Locked from _gfortran_st_open: ... (gdb) c Continuing. Hardware watchpoint 2: ((pthread_mutex_t *) 0x6059d0)->__data.__lock Old value = 0 New value = 1 0x00007ffff6eb6896 in __lll_lock_elision (futex=0x6059d0, adapt_count=<optimized out>, private=0) at ../sysdeps/unix/sysv/linux/x86/elision-lock.c:106 106 return LLL_LOCK ((*futex), private); (gdb) bt #0 0x00007ffff6eb6896 in __lll_lock_elision (futex=0x6059d0, adapt_count=<optimized out>, private=0) at ../sysdeps/unix/sysv/linux/x86/elision-lock.c:106 #1 0x00007ffff7b64aaf in __gthread_mutex_lock (__mutex=0x6059d0) at ../libgcc/gthr-default.h:749 #2 0x00007ffff7b64e47 in insert_unit (n=10) at /home/vries/gcc_versions/devel/src/libgfortran/io/unit.c:244 #3 0x00007ffff7b65128 in get_gfc_unit (n=10, do_create=1) at /home/vries/gcc_versions/devel/src/libgfortran/io/unit.c:356 #4 0x00007ffff7b652d8 in _gfortrani_find_or_create_unit (n=10) at /home/vries/gcc_versions/devel/src/libgfortran/io/unit.c:421 #5 0x00007ffff7b58941 in _gfortran_st_open (opp=0x7fffffffd630) at /home/vries/gcc_versions/devel/src/libgfortran/io/open.c:889 #6 0x00000000004007f1 in MAIN__ () #7 0x00000000004008b7 in main () ... II. Unlocked from _gfortran_st_open: ... (gdb) c Continuing. [New Thread 0x7ffff66bf700 (LWP 19890)] Thread 1 "async_io_1.exe" hit Hardware watchpoint 2: ((pthread_mutex_t *) 0x6059d0)->__data.__lock Old value = 1 New value = 0 0x00007ffff6eb690c in __lll_unlock_elision (lock=0x6059d0, private=0) at ../sysdeps/unix/sysv/linux/x86/elision-unlock.c:31 31 lll_unlock ((*lock), private); (gdb) bt #0 0x00007ffff6eb690c in __lll_unlock_elision (lock=0x6059d0, private=0) at ../sysdeps/unix/sysv/linux/x86/elision-unlock.c:31 #1 0x00007ffff7b64b03 in __gthread_mutex_unlock (__mutex=0x6059d0) at ../libgcc/gthr-default.h:779 #2 0x00007ffff7b65e5c in _gfortrani_unlock_unit (u=0x6058f0) at /home/vries/gcc_versions/devel/src/libgfortran/io/unit.c:772 #3 0x00007ffff7b58980 in _gfortran_st_open (opp=0x7fffffffd630) at /home/vries/gcc_versions/devel/src/libgfortran/io/open.c:894 #4 0x00000000004007f1 in MAIN__ () #5 0x00000000004008b7 in main () ... III. Locked from _gfortran_st_write: ... (gdb) c Continuing. Thread 1 "async_io_1.exe" hit Hardware watchpoint 2: ((pthread_mutex_t *) 0x6059d0)->__data.__lock Old value = 0 New value = 1 __lll_trylock_elision (futex=futex@entry=0x6059d0, adapt_count=adapt_count@entry=0x6059e6) at ../sysdeps/unix/sysv/linux/x86/elision-trylock.c:75 75 } (gdb) bt #0 __lll_trylock_elision (futex=futex@entry=0x6059d0, adapt_count=adapt_count@entry=0x6059e6) at ../sysdeps/unix/sysv/linux/x86/elision-trylock.c:75 #1 0x00007ffff6ead297 in __GI___pthread_mutex_trylock (mutex=0x6059d0) at ../nptl/pthread_mutex_trylock.c:71 #2 0x00007ffff7b64ad9 in __gthread_mutex_trylock (__mutex=0x6059d0) at ../libgcc/gthr-default.h:758 #3 0x00007ffff7b651d2 in get_gfc_unit (n=10, do_create=1) at /home/vries/gcc_versions/devel/src/libgfortran/io/unit.c:380 #4 0x00007ffff7b6588c in _gfortrani_get_unit (dtp=0x7fffffffd630, do_create=1) at /home/vries/gcc_versions/devel/src/libgfortran/io/unit.c:576 #5 0x00007ffff7b60d6d in data_transfer_init (dtp=0x7fffffffd630, read_flag=0) at /home/vries/gcc_versions/devel/src/libgfortran/io/transfer.c:2851 #6 0x00007ffff7b64154 in _gfortran_st_write (dtp=0x7fffffffd630) at /home/vries/gcc_versions/devel/src/libgfortran/io/transfer.c:4410 #7 0x000000000040083f in MAIN__ () #8 0x00000000004008b7 in main () ... IV: Unlocked from _gfortran_st_write_done: ... (gdb) c Continuing. Thread 1 "async_io_1.exe" hit Hardware watchpoint 2: ((pthread_mutex_t *) 0x6059d0)->__data.__lock Old value = 1 New value = 0 0x00007ffff6eb690c in __lll_unlock_elision (lock=0x6059d0, private=0) at ../sysdeps/unix/sysv/linux/x86/elision-unlock.c:31 31 lll_unlock ((*lock), private); (gdb) bt #0 0x00007ffff6eb690c in __lll_unlock_elision (lock=0x6059d0, private=0) at ../sysdeps/unix/sysv/linux/x86/elision-unlock.c:31 #1 0x00007ffff7b64b03 in __gthread_mutex_unlock (__mutex=0x6059d0) at ../libgcc/gthr-default.h:779 #2 0x00007ffff7b65e5c in _gfortrani_unlock_unit (u=0x6058f0) at /home/vries/gcc_versions/devel/src/libgfortran/io/unit.c:772 #3 0x00007ffff7b6445e in _gfortran_st_write_done (dtp=0x7fffffffd630) at /home/vries/gcc_versions/devel/src/libgfortran/io/transfer.c:4496 #4 0x0000000000400880 in MAIN__ () #5 0x00000000004008b7 in main () ... V. Unlocked again, from _gfortrani_st_write_done_worker: ... (gdb) c Continuing. Thread 2 "async_io_1.exe" received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7ffff66bf700 (LWP 19890)] __lll_unlock_elision (lock=0x6059d0, private=0) at ../sysdeps/unix/sysv/linux/x86/elision-unlock.c:29 29 _xend(); (gdb) bt #0 __lll_unlock_elision (lock=0x6059d0, private=0) at ../sysdeps/unix/sysv/linux/x86/elision-unlock.c:29 #1 0x00007ffff7b64b03 in __gthread_mutex_unlock (__mutex=0x6059d0) at ../libgcc/gthr-default.h:779 #2 0x00007ffff7b65e5c in _gfortrani_unlock_unit (u=0x6058f0) at /home/vries/gcc_versions/devel/src/libgfortran/io/unit.c:772 #3 0x00007ffff7b6434e in _gfortrani_st_write_done_worker (dtp=0x608170) at /home/vries/gcc_versions/devel/src/libgfortran/io/transfer.c:4466 #4 0x00007ffff7b71a99 in async_io (arg=0x6058f0) at /home/vries/gcc_versions/devel/src/libgfortran/io/async.c:120 #5 0x00007ffff6eaa4f9 in start_thread (arg=0x7ffff66bf700) at pthread_create.c:465 #6 0x00007ffff6be2ecf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95