[Bug libstdc++/67791] [8/9/10/11 Regression] Crash using std::thread and iostream with dynamic loading of a shared library
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Nov 23 16:42:58 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67791
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|Crash using std::thread and |[8/9/10/11 Regression]
|iostream with dynamic |Crash using std::thread and
|loading of a shared library |iostream with dynamic
| |loading of a shared library
Known to work| |4.9.4
Assignee|unassigned at gcc dot gnu.org |redi at gcc dot gnu.org
Status|NEW |ASSIGNED
Known to fail| |10.2.0, 11.0, 5.1.0, 8.4.0,
| |9.3.0
Target Milestone|--- |8.5
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Jonathan Wakely from comment #7)
> (In reply to nexyon from comment #4)
> > In any case std::thread should not
> > crash I guess, so just to fix that it would be necessary to check whether
> > the standard library was inizialized without threads.
>
> We used to check for the pthread_create weak symbol, and throw an exception
> instead of crashing. Since the fix for PR libstdc++/61841 we don't check it,
> and crash instead of throwing. That should be fixed.
Marking as a regression, because GCC 4.9 printed this error instead of
crashing:
terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permitted
Aborted (core dumped)
That's better than segfaulting with no explanation.
I incorrectly assumed that the use of &pthread_create added for PR 61841 would
make checking __gthread_active_p unnecessary. As the examples here show, that's
not true. The program calls __gthread_active_p() before main() runs, and at
that time libpthread.so is not loaded. When libpthread.so is loaded later, it's
too late for __gthread_active_p to notice.
More information about the Gcc-bugs
mailing list