1/* thr_cthreads.c - wrapper for mach cthreads */ 2/* $OpenLDAP$ */ 3/* This work is part of OpenLDAP Software <http://www.openldap.org/>. 4 * 5 * Copyright 1998-2011 The OpenLDAP Foundation. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted only as authorized by the OpenLDAP 10 * Public License. 11 * 12 * A copy of this license is available in file LICENSE in the 13 * top-level directory of the distribution or, alternatively, at 14 * <http://www.OpenLDAP.org/license.html>. 15 */ 16/* This work was initially developed by Luke Howard for inclusion 17 * in U-MICH LDAP 3.3. 18 */ 19 20#include "portable.h" 21 22#if defined( HAVE_MACH_CTHREADS ) 23#include "ldap_pvt_thread.h" /* Get the thread interface */ 24#define LDAP_THREAD_IMPLEMENTATION 25#include "ldap_thr_debug.h" /* May rename the symbols defined below */ 26 27int 28ldap_int_thread_initialize( void ) 29{ 30 return 0; 31} 32 33int 34ldap_int_thread_destroy( void ) 35{ 36 return 0; 37} 38 39int 40ldap_pvt_thread_create( ldap_pvt_thread_t * thread, 41 int detach, 42 void *(*start_routine)( void *), void *arg) 43{ 44 *thread = cthread_fork( (cthread_fn_t) start_routine, arg); 45 return ( *thread == NULL ? -1 : 0 ); 46} 47 48void 49ldap_pvt_thread_exit( void *retval ) 50{ 51 cthread_exit( (any_t) retval ); 52} 53 54int 55ldap_pvt_thread_join( ldap_pvt_thread_t thread, void **thread_return ) 56{ 57 void *status; 58 status = (void *) cthread_join ( thread ); 59 if (thread_return != NULL) 60 { 61 *thread_return = status; 62 } 63 return 0; 64} 65 66int 67ldap_pvt_thread_kill( ldap_pvt_thread_t thread, int signo ) 68{ 69 return 0; 70} 71 72int 73ldap_pvt_thread_yield( void ) 74{ 75 cthread_yield(); 76 return 0; 77} 78 79int 80ldap_pvt_thread_cond_init( ldap_pvt_thread_cond_t *cond ) 81{ 82 condition_init( cond ); 83 return( 0 ); 84} 85 86int 87ldap_pvt_thread_cond_destroy( ldap_pvt_thread_cond_t *cond ) 88{ 89 condition_clear( cond ); 90 return( 0 ); 91} 92 93int 94ldap_pvt_thread_cond_signal( ldap_pvt_thread_cond_t *cond ) 95{ 96 condition_signal( cond ); 97 return( 0 ); 98} 99 100int 101ldap_pvt_thread_cond_broadcast( ldap_pvt_thread_cond_t *cond ) 102{ 103 condition_broadcast( cond ); 104 return( 0 ); 105} 106 107int 108ldap_pvt_thread_cond_wait( ldap_pvt_thread_cond_t *cond, 109 ldap_pvt_thread_mutex_t *mutex ) 110{ 111 condition_wait( cond, mutex ); 112 return( 0 ); 113} 114 115int 116ldap_pvt_thread_mutex_init( ldap_pvt_thread_mutex_t *mutex ) 117{ 118 mutex_init( mutex ); 119 mutex->name = NULL; 120 return ( 0 ); 121} 122 123int 124ldap_pvt_thread_mutex_destroy( ldap_pvt_thread_mutex_t *mutex ) 125{ 126 mutex_clear( mutex ); 127 return ( 0 ); 128} 129 130int 131ldap_pvt_thread_mutex_lock( ldap_pvt_thread_mutex_t *mutex ) 132{ 133 mutex_lock( mutex ); 134 return ( 0 ); 135} 136 137int 138ldap_pvt_thread_mutex_unlock( ldap_pvt_thread_mutex_t *mutex ) 139{ 140 mutex_unlock( mutex ); 141 return ( 0 ); 142} 143 144int 145ldap_pvt_thread_mutex_trylock( ldap_pvt_thread_mutex_t *mutex ) 146{ 147 return mutex_try_lock( mutex ); 148} 149 150ldap_pvt_thread_t 151ldap_pvt_thread_self( void ) 152{ 153 return cthread_self(); 154} 155 156int 157ldap_pvt_thread_key_create( ldap_pvt_thread_key_t *key ) 158{ 159 return cthread_keycreate( key ); 160} 161 162int 163ldap_pvt_thread_key_destroy( ldap_pvt_thread_key_t key ) 164{ 165 return( 0 ); 166} 167 168int 169ldap_pvt_thread_key_setdata( ldap_pvt_thread_key_t key, void *data ) 170{ 171 return cthread_setspecific( key, data ); 172} 173 174int 175ldap_pvt_thread_key_getdata( ldap_pvt_thread_key_t key, void **data ) 176{ 177 return cthread_getspecific( key, data ); 178} 179 180#endif /* HAVE_MACH_CTHREADS */ 181