Patch from Teemu Torma to fix Solaris 2.6 EH failures.
* gthr.h: Changed the comment about return values. * gthr-solaris.h (__gthread_once): Do not use errno; return the error number instead of -1. (__gthread_key_create): Any non-zero return value is an error. * libgcc2.c (eh_context_initialize): Check for non-zero return value from __gthread_once. Check that the value of get_eh_context was really changed. From-SVN: r18480
This commit is contained in:
parent
ffacfc7cb6
commit
754d1a92e6
@ -1,3 +1,13 @@
|
||||
Wed Mar 11 12:05:20 1998 Teemu Torma <tot@trema.com>
|
||||
|
||||
* gthr.h: Changed the comment about return values.
|
||||
* gthr-solaris.h (__gthread_once): Do not use errno; return the
|
||||
error number instead of -1.
|
||||
(__gthread_key_create): Any non-zero return value is an error.
|
||||
* libgcc2.c (eh_context_initialize): Check for non-zero return
|
||||
value from __gthread_once.
|
||||
Check that the value of get_eh_context was really changed.
|
||||
|
||||
Wed Mar 11 18:26:25 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
|
||||
|
||||
* sh.h (LOOP_ALIGN): Only align when optimizing.
|
||||
|
@ -88,15 +88,13 @@ __gthread_once (__gthread_once_t *once, void (*func) ())
|
||||
return -1;
|
||||
|
||||
if (once == 0 || func == 0)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
return EINVAL;
|
||||
|
||||
if (once->once == 0)
|
||||
{
|
||||
if (mutex_lock (&once->mutex) != 0)
|
||||
return -1;
|
||||
int status = mutex_lock (&once->mutex);
|
||||
if (status != 0)
|
||||
return status;
|
||||
if (once->once == 0)
|
||||
{
|
||||
(*func) ();
|
||||
@ -113,7 +111,7 @@ __gthread_key_create (__gthread_key_t *key, void (*dtor) (void *))
|
||||
/* Solaris 2.5 contains thr_* routines no-op in libc, so test if we actually
|
||||
got a reasonable key value, and if not, fail. */
|
||||
*key = -1;
|
||||
if (thr_keycreate (key, dtor) == -1 || *key == -1)
|
||||
if (thr_keycreate (key, dtor) != 0 || *key == -1)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
|
@ -65,7 +65,8 @@ Boston, MA 02111-1307, USA. */
|
||||
int __gthread_mutex_trylock (__gthread_mutex_t *mutex);
|
||||
int __gthread_mutex_unlock (__gthread_mutex_t *mutex);
|
||||
|
||||
All functions returning int should return 0 on success, -1 on error.
|
||||
All functions returning int should return zero on success or the error
|
||||
number. If the operation is not supported, -1 is returned.
|
||||
|
||||
Currently supported threads packages are
|
||||
POSIX threads with -D_PTHREADS
|
||||
|
@ -3132,7 +3132,11 @@ eh_context_initialize ()
|
||||
#if __GTHREADS
|
||||
|
||||
static __gthread_once_t once = __GTHREAD_ONCE_INIT;
|
||||
if (__gthread_once (&once, eh_threads_initialize) == -1)
|
||||
/* Make sure that get_eh_context does not point to us anymore.
|
||||
Some systems have dummy thread routines in their libc that
|
||||
return a success (Solaris 2.6 for example). */
|
||||
if (__gthread_once (&once, eh_threads_initialize) != 0
|
||||
|| get_eh_context == &eh_context_initialize)
|
||||
{
|
||||
/* Use static version of EH context. */
|
||||
get_eh_context = &eh_context_static;
|
||||
|
Loading…
Reference in New Issue
Block a user