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>
|
Wed Mar 11 18:26:25 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
|
||||||
|
|
||||||
* sh.h (LOOP_ALIGN): Only align when optimizing.
|
* sh.h (LOOP_ALIGN): Only align when optimizing.
|
||||||
|
|
|
@ -88,15 +88,13 @@ __gthread_once (__gthread_once_t *once, void (*func) ())
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (once == 0 || func == 0)
|
if (once == 0 || func == 0)
|
||||||
{
|
return EINVAL;
|
||||||
errno = EINVAL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (once->once == 0)
|
if (once->once == 0)
|
||||||
{
|
{
|
||||||
if (mutex_lock (&once->mutex) != 0)
|
int status = mutex_lock (&once->mutex);
|
||||||
return -1;
|
if (status != 0)
|
||||||
|
return status;
|
||||||
if (once->once == 0)
|
if (once->once == 0)
|
||||||
{
|
{
|
||||||
(*func) ();
|
(*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
|
/* Solaris 2.5 contains thr_* routines no-op in libc, so test if we actually
|
||||||
got a reasonable key value, and if not, fail. */
|
got a reasonable key value, and if not, fail. */
|
||||||
*key = -1;
|
*key = -1;
|
||||||
if (thr_keycreate (key, dtor) == -1 || *key == -1)
|
if (thr_keycreate (key, dtor) != 0 || *key == -1)
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -65,7 +65,8 @@ Boston, MA 02111-1307, USA. */
|
||||||
int __gthread_mutex_trylock (__gthread_mutex_t *mutex);
|
int __gthread_mutex_trylock (__gthread_mutex_t *mutex);
|
||||||
int __gthread_mutex_unlock (__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
|
Currently supported threads packages are
|
||||||
POSIX threads with -D_PTHREADS
|
POSIX threads with -D_PTHREADS
|
||||||
|
|
|
@ -3132,7 +3132,11 @@ eh_context_initialize ()
|
||||||
#if __GTHREADS
|
#if __GTHREADS
|
||||||
|
|
||||||
static __gthread_once_t once = __GTHREAD_ONCE_INIT;
|
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. */
|
/* Use static version of EH context. */
|
||||||
get_eh_context = &eh_context_static;
|
get_eh_context = &eh_context_static;
|
||||||
|
|
Loading…
Reference in New Issue