http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52738

--- Comment #1 from Mateusz Kielar <matek09 at gmail dot com> 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.

Reply via email to