[Bug libgomp/52738] New: libgomp configured with --enable-tls=no crash inside pthread function
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52738 Bug #: 52738 Summary: libgomp configured with --enable-tls=no crash inside pthread function Classification: Unclassified Product: gcc Version: 4.6.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libgomp AssignedTo: unassig...@gcc.gnu.org ReportedBy: mate...@gmail.com I configured libgomp with --enable-tls=no and build it as static library. But I get segmentation fault when I use such OpenMP inside Pthread funcion. gomp_thread inline function from libgomp.h uses pthread_getspecific and it returns null. Then this null value is used in context where null is not allowed. Also in team.c when HAVE_TLS is not defined there is such code: struct gomp_thread local_thr; thr = &local_thr; pthread_setspecific (gomp_tls_key, thr); Is it safe to remember address of local variable? In team.c without HAVE_TLS such pthread_setspecific is used multiple times. When I use the same static library with --enable-tls=yes there is no such problem. I think there is general problem with OpenMP without TLS and Pthreads.
[Bug libgomp/52738] libgomp configured with --enable-tls=no crash inside pthread function
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52738 --- Comment #1 from Mateusz Kielar 2012-03-30 06:30:00 UTC --- (In reply to comment #0) > I configured libgomp with --enable-tls=no and build it as static library. But > I > get segmentation fault when I use such OpenMP inside Pthread funcion. > gomp_thread inline function from libgomp.h uses pthread_getspecific and it > returns null. Then this null value is used in context where null is not > allowed. Also in team.c when HAVE_TLS is not defined there is such code: > struct gomp_thread local_thr; > thr = &local_thr; > pthread_setspecific (gomp_tls_key, thr); > Is it safe to remember address of local variable? In team.c without HAVE_TLS > such pthread_setspecific is used multiple times. > When I use the same static library with --enable-tls=yes there is no such > problem. I think there is general problem with OpenMP without TLS and > Pthreads. Ok, I see that in this case it's safe to call pthread_setspecific with address to local variable. But pthread_setspecific is called just for main thread (in initialize_team when library is loaded). It should also be called when pthread is created, so we can use OpenMP inside pthread function. Without it gomp_thread returns null. Also gomp_tls_key should be deleted in team_destructor function. Without it libgomp sometimes crashes in dlclose.
[Bug libgomp/52738] libgomp configured with --enable-tls=no crash inside pthread function
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52738 --- Comment #2 from Mateusz Kielar 2012-04-19 13:23:17 UTC --- The only way I see to resolve this issue is to check if pthread_getspecific returns null in gomp_thread and if yes then allocate new thread struct and use pthread_setspecific to store it. Could anyone share their opinion?