head	1.3;
access;
symbols
	perseant-exfatfs-base-20250801:1.3
	perseant-exfatfs-base-20240630:1.3
	cjep_sun2x:1.3.0.44
	cjep_sun2x-base:1.3
	cjep_staticlib_x-base1:1.3
	cjep_staticlib_x:1.3.0.42
	cjep_staticlib_x-base:1.3
	phil-wifi-20200421:1.3
	phil-wifi-20200411:1.3
	phil-wifi-20200406:1.3
	pgoyette-compat-merge-20190127:1.3
	pgoyette-compat-20190127:1.3
	pgoyette-compat-20190118:1.3
	pgoyette-compat-1226:1.3
	pgoyette-compat-1126:1.3
	pgoyette-compat-1020:1.3
	pgoyette-compat-0930:1.3
	pgoyette-compat-0906:1.3
	pgoyette-compat-0728:1.3
	pgoyette-compat-0625:1.3
	pgoyette-compat-0521:1.3
	pgoyette-compat-0502:1.3
	pgoyette-compat-0422:1.3
	pgoyette-compat-0415:1.3
	pgoyette-compat-0407:1.3
	pgoyette-compat-0330:1.3
	pgoyette-compat-0322:1.3
	pgoyette-compat-0315:1.3
	pgoyette-compat:1.3.0.40
	pgoyette-compat-base:1.3
	perseant-stdc-iso10646:1.3.0.38
	perseant-stdc-iso10646-base:1.3
	prg-localcount2-base3:1.3
	prg-localcount2-base2:1.3
	prg-localcount2-base1:1.3
	prg-localcount2:1.3.0.36
	prg-localcount2-base:1.3
	pgoyette-localcount-20170426:1.3
	bouyer-socketcan-base1:1.3
	pgoyette-localcount-20170320:1.3
	bouyer-socketcan:1.3.0.34
	bouyer-socketcan-base:1.3
	pgoyette-localcount-20170107:1.3
	pgoyette-localcount-20161104:1.3
	localcount-20160914:1.3
	pgoyette-localcount-20160806:1.3
	pgoyette-localcount-20160726:1.3
	pgoyette-localcount:1.3.0.32
	pgoyette-localcount-base:1.3
	netbsd-5-2-3-RELEASE:1.3
	netbsd-5-1-5-RELEASE:1.3
	yamt-pagecache-base9:1.3
	yamt-pagecache-tag8:1.3
	tls-earlyentropy:1.3.0.28
	tls-earlyentropy-base:1.3
	riastradh-xf86-video-intel-2-7-1-pre-2-21-15:1.3
	riastradh-drm2-base3:1.3
	netbsd-5-2-2-RELEASE:1.3
	netbsd-5-1-4-RELEASE:1.3
	netbsd-5-2-1-RELEASE:1.3
	netbsd-5-1-3-RELEASE:1.3
	agc-symver:1.3.0.30
	agc-symver-base:1.3
	tls-maxphys-base:1.3
	yamt-pagecache-base8:1.3
	netbsd-5-2:1.3.0.26
	yamt-pagecache-base7:1.3
	netbsd-5-2-RELEASE:1.3
	netbsd-5-2-RC1:1.3
	yamt-pagecache-base6:1.3
	yamt-pagecache-base5:1.3
	yamt-pagecache-base4:1.3
	netbsd-5-1-2-RELEASE:1.3
	netbsd-5-1-1-RELEASE:1.3
	yamt-pagecache-base3:1.3
	yamt-pagecache-base2:1.3
	yamt-pagecache:1.3.0.24
	yamt-pagecache-base:1.3
	bouyer-quota2-nbase:1.3
	bouyer-quota2:1.3.0.22
	bouyer-quota2-base:1.3
	matt-nb5-pq3:1.3.0.20
	matt-nb5-pq3-base:1.3
	netbsd-5-1:1.3.0.18
	netbsd-5-1-RELEASE:1.3
	netbsd-5-1-RC4:1.3
	netbsd-5-1-RC3:1.3
	netbsd-5-1-RC2:1.3
	netbsd-5-1-RC1:1.3
	netbsd-5-0-2-RELEASE:1.3
	netbsd-5-0-1-RELEASE:1.3
	jym-xensuspend-nbase:1.3
	netbsd-5-0:1.3.0.16
	netbsd-5-0-RELEASE:1.3
	netbsd-5-0-RC4:1.3
	netbsd-5-0-RC3:1.3
	netbsd-5-0-RC2:1.3
	jym-xensuspend:1.3.0.14
	jym-xensuspend-base:1.3
	netbsd-5-0-RC1:1.3
	netbsd-5:1.3.0.12
	netbsd-5-base:1.3
	mjf-devfs2:1.3.0.10
	mjf-devfs2-base:1.3
	yamt-pf42-base4:1.3
	yamt-pf42-base3:1.3
	hpcarm-cleanup-nbase:1.3
	yamt-pf42-base2:1.3
	yamt-pf42:1.3.0.8
	yamt-pf42-base:1.3
	keiichi-mipv6:1.3.0.6
	keiichi-mipv6-base:1.3
	cube-autoconf:1.3.0.4
	cube-autoconf-base:1.3
	hpcarm-cleanup:1.3.0.2
	hpcarm-cleanup-base:1.3
	netbsd-3-1-1-RELEASE:1.2
	netbsd-3-0-3-RELEASE:1.2
	abandoned-netbsd-4-base:1.2
	abandoned-netbsd-4:1.2.0.12
	netbsd-3-1:1.2.0.14
	netbsd-3-1-RELEASE:1.2
	netbsd-3-0-2-RELEASE:1.2
	netbsd-3-1-RC4:1.2
	netbsd-3-1-RC3:1.2
	netbsd-3-1-RC2:1.2
	netbsd-3-1-RC1:1.2
	netbsd-3-0-1-RELEASE:1.2
	netbsd-3-0:1.2.0.10
	netbsd-3-0-RELEASE:1.2
	netbsd-3-0-RC6:1.2
	netbsd-3-0-RC5:1.2
	netbsd-3-0-RC4:1.2
	netbsd-3-0-RC3:1.2
	netbsd-3-0-RC2:1.2
	netbsd-3-0-RC1:1.2
	netbsd-2-0-3-RELEASE:1.2
	netbsd-2-1:1.2.0.8
	netbsd-2-1-RELEASE:1.2
	netbsd-2-1-RC6:1.2
	netbsd-2-1-RC5:1.2
	netbsd-2-1-RC4:1.2
	netbsd-2-1-RC3:1.2
	netbsd-2-1-RC2:1.2
	netbsd-2-1-RC1:1.2
	netbsd-2-0-2-RELEASE:1.2
	netbsd-3:1.2.0.6
	netbsd-3-base:1.2
	netbsd-2-0-1-RELEASE:1.2
	netbsd-2:1.2.0.4
	netbsd-2-base:1.2
	netbsd-2-0-RELEASE:1.2
	netbsd-2-0-RC5:1.2
	netbsd-2-0-RC4:1.2
	netbsd-2-0-RC3:1.2
	netbsd-2-0-RC2:1.2
	netbsd-2-0-RC1:1.2
	netbsd-2-0:1.2.0.2
	netbsd-2-0-base:1.2;
locks; strict;
comment	@ * @;


1.3
date	2006.11.20.17.08.39;	author skrll;	state dead;
branches;
next	1.2;

1.2
date	2003.12.07.12.25.43;	author simonb;	state Exp;
branches;
next	1.1;

1.1
date	2003.12.05.12.05.32;	author simonb;	state Exp;
branches;
next	;


desc
@@


1.3
log
@Delete more gcc3 stuff.
@
text
@/* This file is automatically generated.  DO NOT EDIT! */
/* Generated from: 	NetBSD: mknative,v 1.12 2003/03/05 06:17:17 mrg Exp  */

/* Threads compatibility routines for libgcc2 and libobjc.  */
/* Compile this one with gcc.  */
/* Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING.  If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.  */

/* As a special exception, if you link this library with other files,
   some of which are compiled with GCC, to produce an executable,
   this library does not by itself cause the resulting executable
   to be covered by the GNU General Public License.
   This exception does not however invalidate any other reasons why
   the executable file might be covered by the GNU General Public License.  */

#ifndef _GLIBCPP_GCC_GTHR_SINGLE_H
#define _GLIBCPP_GCC_GTHR_SINGLE_H

/* Just provide compatibility for mutex handling.  */

typedef int __gthread_mutex_t;

#define __GTHREAD_MUTEX_INIT 0

#ifdef __cplusplus
#define _GLIBCPP_UNUSED(x)
#else
#define _GLIBCPP_UNUSED(x) x __attribute__((unused))
#endif

#ifdef _LIBOBJC

/* Thread local storage for a single thread */
static void *thread_local_storage = NULL;

/* Backend initialization functions */

/* Initialize the threads subsystem.  */
static inline int
__gthread_objc_init_thread_system (void)
{
  /* No thread support available */
  return -1;
}

/* Close the threads subsystem.  */
static inline int
__gthread_objc_close_thread_system (void)
{
  /* No thread support available */
  return -1;
}

/* Backend thread functions */

/* Create a new thread of execution.  */
static inline objc_thread_t
__gthread_objc_thread_detach (void (* func)(void *), void * _GLIBCPP_UNUSED(arg))
{
  /* No thread support available */
  return NULL;
}

/* Set the current thread's priority.  */
static inline int
__gthread_objc_thread_set_priority (int _GLIBCPP_UNUSED(priority))
{
  /* No thread support available */
  return -1;
}

/* Return the current thread's priority.  */
static inline int
__gthread_objc_thread_get_priority (void)
{
  return OBJC_THREAD_INTERACTIVE_PRIORITY;
}

/* Yield our process time to another thread.  */
static inline void
__gthread_objc_thread_yield (void)
{
  return;
}

/* Terminate the current thread.  */
static inline int
__gthread_objc_thread_exit (void)
{
  /* No thread support available */
  /* Should we really exit the program */
  /* exit (&__objc_thread_exit_status); */
  return -1;
}

/* Returns an integer value which uniquely describes a thread.  */
static inline objc_thread_t
__gthread_objc_thread_id (void)
{
  /* No thread support, use 1.  */
  return (objc_thread_t) 1;
}

/* Sets the thread's local storage pointer.  */
static inline int
__gthread_objc_thread_set_data (void *value)
{
  thread_local_storage = value;
  return 0;
}

/* Returns the thread's local storage pointer.  */
static inline void *
__gthread_objc_thread_get_data (void)
{
  return thread_local_storage;
}

/* Backend mutex functions */

/* Allocate a mutex.  */
static inline int
__gthread_objc_mutex_allocate (objc_mutex_t _GLIBCPP_UNUSED(mutex))
{
  return 0;
}

/* Deallocate a mutex.  */
static inline int
__gthread_objc_mutex_deallocate (objc_mutex_t _GLIBCPP_UNUSED(mutex))
{
  return 0;
}

/* Grab a lock on a mutex.  */
static inline int
__gthread_objc_mutex_lock (objc_mutex_t _GLIBCPP_UNUSED(mutex))
{
  /* There can only be one thread, so we always get the lock */
  return 0;
}

/* Try to grab a lock on a mutex.  */
static inline int
__gthread_objc_mutex_trylock (objc_mutex_t _GLIBCPP_UNUSED(mutex))
{
  /* There can only be one thread, so we always get the lock */
  return 0;
}

/* Unlock the mutex */
static inline int
__gthread_objc_mutex_unlock (objc_mutex_t _GLIBCPP_UNUSED(mutex))
{
  return 0;
}

/* Backend condition mutex functions */

/* Allocate a condition.  */
static inline int
__gthread_objc_condition_allocate (objc_condition_t _GLIBCPP_UNUSED(condition))
{
  return 0;
}

/* Deallocate a condition.  */
static inline int
__gthread_objc_condition_deallocate (objc_condition_t _GLIBCPP_UNUSED(condition))
{
  return 0;
}

/* Wait on the condition */
static inline int
__gthread_objc_condition_wait (objc_condition_t _GLIBCPP_UNUSED(condition),
			       objc_mutex_t _GLIBCPP_UNUSED(mutex))
{
  return 0;
}

/* Wake up all threads waiting on this condition.  */
static inline int
__gthread_objc_condition_broadcast (objc_condition_t _GLIBCPP_UNUSED(condition))
{
  return 0;
}

/* Wake up one thread waiting on this condition.  */
static inline int
__gthread_objc_condition_signal (objc_condition_t _GLIBCPP_UNUSED(condition))
{
  return 0;
}

#else /* _LIBOBJC */

static inline int
__gthread_active_p (void)
{
  return 0;
}

static inline int
__gthread_mutex_lock (__gthread_mutex_t * _GLIBCPP_UNUSED(mutex))
{
  return 0;
}

static inline int
__gthread_mutex_trylock (__gthread_mutex_t * _GLIBCPP_UNUSED(mutex))
{
  return 0;
}

static inline int
__gthread_mutex_unlock (__gthread_mutex_t * _GLIBCPP_UNUSED(mutex))
{
  return 0;
}

#endif /* _LIBOBJC */

#undef _GLIBCPP_UNUSED

#endif /* ! _GLIBCPP_GCC_GTHR_SINGLE_H */
@


1.2
log
@Use gthr-single.h ("no real pthreads support") on ns32k for now.
@
text
@@


1.1
log
@Add ns32k GCC3 support.
@
text
@d2 1
a2 1
/* Generated from: 	NetBSD: mknative-gcc,v 1.5 2003/07/30 05:10:06 mrg Exp  */
d6 1
a6 1
/* Copyright (C) 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
d32 2
a33 2
#ifndef _GLIBCPP_GCC_GTHR_POSIX_H
#define _GLIBCPP_GCC_GTHR_POSIX_H
d35 1
a35 2
/* POSIX threads specific definitions.
   Easy, since the interface is just one-to-one mapping.  */
d37 1
a37 1
#define __GTHREADS 1
d39 1
a39 2
#include <pthread.h>
#include <unistd.h>
d41 5
a45 19
typedef pthread_key_t __gthread_key_t;
typedef pthread_once_t __gthread_once_t;
typedef pthread_mutex_t __gthread_mutex_t;

#define __GTHREAD_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER
#define __GTHREAD_ONCE_INIT PTHREAD_ONCE_INIT

#if _GLIBCPP_SUPPORTS_WEAK && _GLIBCPP_GTHREAD_USE_WEAK

#pragma weak pthread_once
#pragma weak pthread_key_create
#pragma weak pthread_key_delete
#pragma weak pthread_getspecific
#pragma weak pthread_setspecific
#pragma weak pthread_create

#pragma weak pthread_mutex_lock
#pragma weak pthread_mutex_trylock
#pragma weak pthread_mutex_unlock
a47 55
/* Objective-C.  */
#pragma weak pthread_cond_broadcast
#pragma weak pthread_cond_destroy
#pragma weak pthread_cond_init
#pragma weak pthread_cond_signal
#pragma weak pthread_cond_wait
#pragma weak pthread_exit
#pragma weak pthread_mutex_init
#pragma weak pthread_mutex_destroy
#pragma weak pthread_self
/* These really should be protected by _POSIX_PRIORITY_SCHEDULING, but
   we use them inside a _POSIX_THREAD_PRIORITY_SCHEDULING block.  */
#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
#pragma weak sched_get_priority_max
#pragma weak sched_get_priority_min
#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
#pragma weak sched_yield
#pragma weak pthread_attr_destroy
#pragma weak pthread_attr_init
#pragma weak pthread_attr_setdetachstate
#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
#pragma weak pthread_getschedparam
#pragma weak pthread_setschedparam
#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
#endif /* _LIBOBJC */

static inline int
__gthread_active_p (void)
{
  static void *const __gthread_active_ptr = (void *) &pthread_create;
  return __gthread_active_ptr != 0;
}

#else /* not _GLIBCPP_SUPPORTS_WEAK */

static inline int
__gthread_active_p (void)
{
  return 1;
}

#endif /* _GLIBCPP_SUPPORTS_WEAK */

#ifdef _LIBOBJC

/* This is the config.h file in libobjc/ */
#include <config.h>

#ifdef HAVE_SCHED_H
# include <sched.h>
#endif

/* Key structure for maintaining thread specific storage */
static pthread_key_t _objc_thread_storage;
static pthread_attr_t _objc_thread_attribs;
d58 1
a58 15
  if (__gthread_active_p ())
    {
      /* Initialize the thread storage key */
      if (pthread_key_create (&_objc_thread_storage, NULL) == 0)
	{
	  /* The normal default detach state for threads is
	   * PTHREAD_CREATE_JOINABLE which causes threads to not die
	   * when you think they should.  */
	  if (pthread_attr_init (&_objc_thread_attribs) == 0
	      && pthread_attr_setdetachstate (&_objc_thread_attribs,
					      PTHREAD_CREATE_DETACHED) == 0)
	    return 0;
	}
    }

d66 1
a66 5
  if (__gthread_active_p ()
      && pthread_key_delete (_objc_thread_storage) == 0
      && pthread_attr_destroy (&_objc_thread_attribs) == 0)
    return 0;

d74 1
a74 1
__gthread_objc_thread_detach (void (*func)(void *), void *arg)
d76 2
a77 12
  objc_thread_t thread_id;
  pthread_t new_thread_handle;

  if (!__gthread_active_p ())
    return NULL;

  if (!(pthread_create (&new_thread_handle, NULL, (void *) func, arg)))
    thread_id = (objc_thread_t) new_thread_handle;
  else
    thread_id = NULL;

  return thread_id;
d82 1
a82 1
__gthread_objc_thread_set_priority (int priority)
d84 2
a85 35
  if (!__gthread_active_p ())
    return -1;
  else
    {
#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
      pthread_t thread_id = pthread_self ();
      int policy;
      struct sched_param params;
      int priority_min, priority_max;

      if (pthread_getschedparam (thread_id, &policy, &params) == 0)
	{
	  if ((priority_max = sched_get_priority_max (policy)) == -1)
	    return -1;

	  if ((priority_min = sched_get_priority_min (policy)) == -1)
	    return -1;

	  if (priority > priority_max)
	    priority = priority_max;
	  else if (priority < priority_min)
	    priority = priority_min;
	  params.sched_priority = priority;

	  /*
	   * The solaris 7 and several other man pages incorrectly state that
	   * this should be a pointer to policy but pthread.h is universally
	   * at odds with this.
	   */
	  if (pthread_setschedparam (thread_id, policy, &params) == 0)
	    return 0;
	}
#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
      return -1;
    }
d92 1
a92 14
#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
  if (__gthread_active_p ())
    {
      int policy;
      struct sched_param params;

      if (pthread_getschedparam (pthread_self (), &policy, &params) == 0)
	return params.sched_priority;
      else
	return -1;
    }
  else
#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */
    return OBJC_THREAD_INTERACTIVE_PRIORITY;
d99 1
a99 2
  if (__gthread_active_p ())
    sched_yield ();
d106 3
a108 5
  if (__gthread_active_p ())
    /* exit the thread */
    pthread_exit (&__objc_thread_exit_status);

  /* Failed if we reached here */
d116 2
a117 4
  if (__gthread_active_p ())
    return (objc_thread_t) pthread_self ();
  else
    return (objc_thread_t) 1;
d124 2
a125 7
  if (__gthread_active_p ())
    return pthread_setspecific (_objc_thread_storage, value);
  else
    {
      thread_local_storage = value;
      return 0;
    }
d132 1
a132 4
  if (__gthread_active_p ())
    return pthread_getspecific (_objc_thread_storage);
  else
    return thread_local_storage;
d139 1
a139 1
__gthread_objc_mutex_allocate (objc_mutex_t mutex)
a140 12
  if (__gthread_active_p ())
    {
      mutex->backend = objc_malloc (sizeof (pthread_mutex_t));

      if (pthread_mutex_init ((pthread_mutex_t *) mutex->backend, NULL))
	{
	  objc_free (mutex->backend);
	  mutex->backend = NULL;
	  return -1;
	}
    }

d146 1
a146 1
__gthread_objc_mutex_deallocate (objc_mutex_t mutex)
a147 23
  if (__gthread_active_p ())
    {
      int count;

      /*
       * Posix Threads specifically require that the thread be unlocked
       * for pthread_mutex_destroy to work.
       */

      do
	{
	  count = pthread_mutex_unlock ((pthread_mutex_t *) mutex->backend);
	  if (count < 0)
	    return -1;
	}
      while (count);

      if (pthread_mutex_destroy ((pthread_mutex_t *) mutex->backend))
	return -1;

      objc_free (mutex->backend);
      mutex->backend = NULL;
    }
d153 1
a153 1
__gthread_objc_mutex_lock (objc_mutex_t mutex)
d155 1
a155 6
  if (__gthread_active_p ()
      && pthread_mutex_lock ((pthread_mutex_t *) mutex->backend) != 0)
    {
      return -1;
    }

d161 1
a161 1
__gthread_objc_mutex_trylock (objc_mutex_t mutex)
d163 1
a163 6
  if (__gthread_active_p ()
      && pthread_mutex_trylock ((pthread_mutex_t *) mutex->backend) != 0)
    {
      return -1;
    }

d169 1
a169 1
__gthread_objc_mutex_unlock (objc_mutex_t mutex)
a170 6
  if (__gthread_active_p ()
      && pthread_mutex_unlock ((pthread_mutex_t *) mutex->backend) != 0)
    {
      return -1;
    }

d178 1
a178 1
__gthread_objc_condition_allocate (objc_condition_t condition)
a179 12
  if (__gthread_active_p ())
    {
      condition->backend = objc_malloc (sizeof (pthread_cond_t));

      if (pthread_cond_init ((pthread_cond_t *) condition->backend, NULL))
	{
	  objc_free (condition->backend);
	  condition->backend = NULL;
	  return -1;
	}
    }

d185 1
a185 1
__gthread_objc_condition_deallocate (objc_condition_t condition)
a186 8
  if (__gthread_active_p ())
    {
      if (pthread_cond_destroy ((pthread_cond_t *) condition->backend))
	return -1;

      objc_free (condition->backend);
      condition->backend = NULL;
    }
d192 2
a193 1
__gthread_objc_condition_wait (objc_condition_t condition, objc_mutex_t mutex)
d195 1
a195 5
  if (__gthread_active_p ())
    return pthread_cond_wait ((pthread_cond_t *) condition->backend,
			      (pthread_mutex_t *) mutex->backend);
  else
    return 0;
d200 1
a200 1
__gthread_objc_condition_broadcast (objc_condition_t condition)
d202 1
a202 4
  if (__gthread_active_p ())
    return pthread_cond_broadcast ((pthread_cond_t *) condition->backend);
  else
    return 0;
d207 1
a207 1
__gthread_objc_condition_signal (objc_condition_t condition)
d209 1
a209 4
  if (__gthread_active_p ())
    return pthread_cond_signal ((pthread_cond_t *) condition->backend);
  else
    return 0;
d215 1
a215 1
__gthread_once (__gthread_once_t *once, void (*func) (void))
d217 1
a217 4
  if (__gthread_active_p ())
    return pthread_once (once, func);
  else
    return -1;
d221 1
a221 1
__gthread_key_create (__gthread_key_t *key, void (*dtor) (void *))
d223 1
a223 1
  return pthread_key_create (key, dtor);
d227 1
a227 1
__gthread_key_dtor (__gthread_key_t key, void *ptr)
d229 1
a229 5
  /* Just reset the key value to zero.  */
  if (ptr)
    return pthread_setspecific (key, 0);
  else
    return 0;
d233 1
a233 1
__gthread_key_delete (__gthread_key_t key)
d235 1
a235 1
  return pthread_key_delete (key);
d238 1
a238 5
static inline void *
__gthread_getspecific (__gthread_key_t key)
{
  return pthread_getspecific (key);
}
d240 1
a240 34
static inline int
__gthread_setspecific (__gthread_key_t key, const void *ptr)
{
  return pthread_setspecific (key, ptr);
}

static inline int
__gthread_mutex_lock (__gthread_mutex_t *mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_lock (mutex);
  else
    return 0;
}

static inline int
__gthread_mutex_trylock (__gthread_mutex_t *mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_trylock (mutex);
  else
    return 0;
}

static inline int
__gthread_mutex_unlock (__gthread_mutex_t *mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_unlock (mutex);
  else
    return 0;
}

#endif /* _LIBOBJC */
d242 1
a242 1
#endif /* ! _GLIBCPP_GCC_GTHR_POSIX_H */
@

