* gthr-posix.h (__gthread_active_p): Use the Solaris implementation

for FreeBSD as well.

This is the fix for __gthread_active_p() returning false positives
which was committed as rev. 1.1.1.8.2.1 to RELENG_7 but now looped
back to the vendor branch via the GCC repository and relicensed to
be GPLv2 by me.
Thanks go to gerald@ for getting the fix approved upstream and for
committing to the GCC repository.

PR:		119289
Approved by:	core
This commit is contained in:
Marius Strobl 2008-04-21 20:40:42 +00:00
parent c817ff638d
commit 7125e147b2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/vendor/gcc/dist/; revision=178388

View File

@ -152,9 +152,12 @@ __gthrw(pthread_setschedparam)
it is passed so we cannot pretend that the interface is active if -pthreads it is passed so we cannot pretend that the interface is active if -pthreads
is not specified. On Solaris 2.5.1, the interface is not exposed at all so is not specified. On Solaris 2.5.1, the interface is not exposed at all so
we need to play the usual game with weak symbols. On Solaris 10 and up, a we need to play the usual game with weak symbols. On Solaris 10 and up, a
working interface is always exposed. */ working interface is always exposed. On FreeBSD 6 and later, libc also
exposes a dummy POSIX threads interface, similar to what Solaris 2.6 up
to 9 does. FreeBSD >= 700014 even provides a pthread_cancel stub in libc,
which means the alternate __gthread_active_p below cannot be used there. */
#if defined(__sun) && defined(__svr4__) #if defined(__FreeBSD__) || (defined(__sun) && defined(__svr4__))
static volatile int __gthread_active = -1; static volatile int __gthread_active = -1;
@ -197,7 +200,7 @@ __gthread_active_p (void)
return __gthread_active_latest_value != 0; return __gthread_active_latest_value != 0;
} }
#else /* not Solaris */ #else /* neither FreeBSD nor Solaris */
static inline int static inline int
__gthread_active_p (void) __gthread_active_p (void)
@ -207,7 +210,7 @@ __gthread_active_p (void)
return __gthread_active_ptr != 0; return __gthread_active_ptr != 0;
} }
#endif /* Solaris */ #endif /* FreeBSD or Solaris */
#else /* not SUPPORTS_WEAK */ #else /* not SUPPORTS_WEAK */