public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "kargl at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug libgomp/103444] Fortran async IO is broken on FreeBSD
Date: Tue, 07 Dec 2021 20:30:05 +0000	[thread overview]
Message-ID: <bug-103444-4-oLQtYXTZZO@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-103444-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103444

--- Comment #4 from kargl at gcc dot gnu.org ---
This is as far as I have gotten on this bug.  I don't know if
this is a race condition in libgfortran's async_close(), a 
problem with gcc internal threading modeling (i.e., __gthrw_),
and problem with FreeBSD libthr.  Pointers on how to go to
the next step appreciated.  I assume something in __threadid
below is amiss.

% gfcx -o z -fopenmp -g async_io_9.f90 && ./z

% gdb ./z

(gdb) b async.c:479
Breakpoint 1 at 0x200a77ff0: file ../../../gccx/libgfortran/io/async.c, line
479.
(gdb) run
Thread 1 hit Breakpoint 1, _gfortrani_async_close (au=0x201a49000)
    at ../../../gccx/libgfortran/io/async.c:479
479       if (au == NULL)
(gdb) p *au
$1 = {io_lock = 0x2006da908, lock = 0x2006da888, empty = true, id = {
    waiting = -1, low = 1, high = 1, done = {pending = 0, 
      signal = 0x201a230a0}}, work = {pending = 0, signal = 0x201a23060}, 
  emptysignal = {pending = 0, signal = 0x201a23080}, pdt = 0x201a4e000, 
  thread = 0x201a12700, head = 0x0, tail = 0x0, error = {message = 0x0, 
    cmp = 0x0, has_error = false, last_good_id = 0, family = 0, 
    fatal_error = false}}
(gdb) n
483       enqueue_close (au);
(gdb) n
484       T_ERROR (__gthread_join, au->thread, NULL);
(gdb) 

Thread 2 received signal SIGBUS, Bus error.
[Switching to LWP 180470 of process 18692]
0x0000000200f1ad6a in _Unwind_ForcedUnwind (exc=0x201a12938, 
    stop=0x20068a030 <thread_unwind_stop>, stop_argument=0x0)
    at ../../../gccx/libgcc/unwind.inc:215
215       exc->private_1 = (_Unwind_Ptr) stop;


(gdb) run 
Thread 1 hit Breakpoint 1, _gfortrani_async_close (au=0x201a49000)
    at ../../../gccx/libgfortran/io/async.c:479
479       if (au == NULL)
(gdb) n
483       enqueue_close (au);
(gdb) n
484       T_ERROR (__gthread_join, au->thread, NULL);
(gdb) s
__gthread_join (__value_ptr=0x0, __threadid=0x201a12700)
    at ../libgcc/gthr-default.h:669
669       return __gthrw_(pthread_join) (__threadid, __value_ptr);
(gdb) p __value_ptr
$2 = (void **) 0x0
(gdb) p __threadid
$3 = (__gthread_t) 0x201a12700
(gdb) p *__threadid
$4 = {tid = 180471, lock = {m_owner = 0, m_flags = 0, m_ceilings = {0, 0}, 
    m_rb_lnk = 0, m_spare = {0, 0}}, cycle = 0, locklevel = 0, 
  critical_count = 0, sigblock = 0, fsigblock = 0, tle = {
    tqe_next = 0x201a12000, tqe_prev = 0x200699900 <_thread_list>}, gcle = {
    tqe_next = 0x0, tqe_prev = 0x0}, hle = {le_next = 0x0, 
    le_prev = 0x20069a128}, wle = {tqe_next = 0x0, tqe_prev = 0x201a19080}, 
  refcount = 1, start_routine = 0x200a764d0 <async_io>, arg = 0x201a1df00, 
  attr = {sched_policy = 2, sched_inherit = 4, prio = 0, suspend = 0, 
    flags = 2, stackaddr_attr = 0x7fffbfdfe000, stacksize_attr = 2097152, 
    guardsize_attr = 4096, cpuset = 0x0, cpusetsize = 0}, cancel_enable = 1, 
  cancel_pending = 0, cancel_point = 1, no_cancel = 0, cancel_async = 0, 
  cancelling = 0, sigmask = {__bits = {0, 0, 0, 0}}, unblock_sigcancel = 0, 
  in_sigsuspend = 0, deferred_siginfo = {si_signo = 0, si_errno = 0, 
    si_code = 0, si_pid = 0, si_uid = 0, si_status = 0, si_addr = 0x0, 
    si_value = {sival_int = 0, sival_ptr = 0x0, sigval_int = 0, 
      sigval_ptr = 0x0}, _reason = {_fault = {_trapno = 0}, _timer = {
        _timerid = 0, _overrun = 0}, _mesgq = {_mqd = 0}, _poll = {_band = 0}, 
      _capsicum = {_syscall = 0}, __spare__ = {__spare1__ = 0, __spare2__ = {
          0, 0, 0, 0, 0, 0, 0}}}}, deferred_sigmask = {__bits = {0, 0, 0, 0}}, 
  deferred_sigact = {__sigaction_u = {__sa_handler = 0x0, 
      __sa_sigaction = 0x0}, sa_flags = 0, sa_mask = {__bits = {0, 0, 0, 0}}}, 
  deferred_run = 0, force_exit = 0, state = PS_RUNNING, error = 0, 
  joiner = 0x0, flags = 0, tlflags = 2, mq = {{tqh_first = 0x0, 
      tqh_last = 0x201a128a8}, {tqh_first = 0x0, tqh_last = 0x201a128b8}, {
      tqh_first = 0x0, tqh_last = 0x201a128c8}, {tqh_first = 0x0, 
      tqh_last = 0x201a128d8}, {tqh_first = 0x0, tqh_last = 0x201a128e8}, {
      tqh_first = 0x0, tqh_last = 0x201a128f8}}, ret = 0x0, specific = 0x0, 
  specific_data_count = 0, rdlock_count = 0, rtld_bits = 0, tcb = 0x2006bc1c0, 
  cleanup = 0x0, ex = {exception_class = 0, exception_cleanup = 0x0, 
    private_1 = 0, private_2 = 0}, unwind_stackend = 0x7fffbfffe000, 
  unwind_disabled = 0, magic = 3499860245, report_events = 0, event_mask = 0, 
  event_buf = {event = TD_EVENT_NONE, th_p = 0, data = 0}, wchan = 0x0, 
  mutex_obj = 0x2006da888, will_sleep = 0, nwaiter_defer = 0, 
  robust_inited = 0, robust_list = 0, priv_robust_list = 0, inact_mtx = 0, 
  defer_waiters = {0x20069a428, 0x0 <repeats 49 times>}, 
  wake_addr = 0x200637000, sleepqueue = 0x201a19080, name = 0x0, 
  dlerror_msg = '\000' <repeats 511 times>, dlerror_seen = 0}
(gdb) s

Thread 2 received signal SIGBUS, Bus error.
[Switching to LWP 180472 of process 18709]
0x0000000200f1ad6a in _Unwind_ForcedUnwind (exc=0x201a12938, 
    stop=0x20068a030 <thread_unwind_stop>, stop_argument=0x0)
    at ../../../gccx/libgcc/unwind.inc:215
215       exc->private_1 = (_Unwind_Ptr) stop;

      parent reply	other threads:[~2021-12-07 20:30 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-26 19:07 [Bug libgomp/103444] New: " kargl at gcc dot gnu.org
2021-11-26 19:10 ` [Bug libgomp/103444] " kargl at gcc dot gnu.org
2021-11-26 19:19 ` kargl at gcc dot gnu.org
2021-11-28  8:19 ` pinskia at gcc dot gnu.org
2021-12-07 20:30 ` kargl at gcc dot gnu.org [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-103444-4-oLQtYXTZZO@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).