X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblthread%2Fthread.c;h=af2a14eb88ca0abdbcd8a5516006e84f24d9ab45;hb=61e8984d7aaaada398c84bdd60d33bcba2c940e5;hp=1ba34ff86b20da6ce1f32cf673bdc173a76a3e98;hpb=eb16d5d88faff25cd3d7787a6b00e5f893f810b3;p=openldap diff --git a/libraries/liblthread/thread.c b/libraries/liblthread/thread.c index 1ba34ff86b..af2a14eb88 100644 --- a/libraries/liblthread/thread.c +++ b/libraries/liblthread/thread.c @@ -6,7 +6,7 @@ #if defined( HAVE_PTHREADS ) -#ifdef HAVE_DCE +#ifndef HAVE_PTHREAD_KILL /*********************************************************************** * * * pthreads package with DCE - no mapping to do (except to create a * @@ -20,7 +20,7 @@ pthread_kill( pthread_t tid, int sig ) { kill( getpid(), sig ); } -#endif /* DCE */ +#endif /* HAVE_PTHREAD_KILL */ #elif defined( HAVE_MACH_CTHREADS ) @@ -72,7 +72,7 @@ pthread_create( } void -pthread_yield() +pthread_yield( void ) { cthread_yield(); } @@ -180,7 +180,6 @@ pthread_cond_broadcast( pthread_cond_t *cv ) * * *******************/ -#if !defined(__SunOS_5_6) int pthread_attr_init( pthread_attr_t *attr ) { @@ -220,15 +219,13 @@ pthread_create( { return( thr_create( NULL, 0, func, arg, *attr, tid ) ); } -#endif /* ! sunos56 */ void -pthread_yield() +pthread_yield( void ) { thr_yield(); } -#if !defined(__SunOS_5_6) void pthread_exit() { @@ -307,7 +304,6 @@ pthread_cond_broadcast( pthread_cond_t *cv ) { return( cond_broadcast( cv ) ); } -#endif /* ! sunos56 */ #elif defined( HAVE_LWP ) @@ -317,9 +313,6 @@ pthread_cond_broadcast( pthread_cond_t *cv ) * * *************/ -extern stkalign_t *get_stack(); -static void lwp_create_stack(); - int pthread_attr_init( pthread_attr_t *attr ) { @@ -347,6 +340,14 @@ pthread_attr_setdetachstate( pthread_attr_t *attr, int detachstate ) return( 0 ); } +static void +lwp_create_stack( VFP func, void *arg, int stackno ) +{ + (*func)( arg ); + + free_stack( stackno ); +} + /* ARGSUSED */ int pthread_create( @@ -366,16 +367,8 @@ pthread_create( arg, stackno ) ); } -static void -lwp_create_stack( VFP func, void *arg, int stackno ) -{ - (*func)( arg ); - - free_stack( stackno ); -} - void -pthread_yield() +pthread_yield( void ) { lwp_yield( SELF ); } @@ -476,6 +469,161 @@ pthread_cond_broadcast( pthread_cond_t *cv ) } +#elif defined( HAVE_NT_MULTITHREADS ) + +#include +#include + +int +pthread_attr_init( pthread_attr_t *attr ) +{ + *attr = 0; + return( 0 ); +} + +int +pthread_attr_destroy( pthread_attr_t *attr ) +{ + return( 0 ); +} + +int +pthread_attr_getdetachstate( pthread_attr_t *attr, int *detachstate ) +{ + *detachstate = *attr; + return( 0 ); +} + +int +pthread_attr_setdetachstate( pthread_attr_t *attr, int detachstate ) +{ + *attr = detachstate; + return( 0 ); +} + +int +pthread_create( + pthread_t *tid, + pthread_attr_t *attr, + VFP func, + void *arg +) +{ + *tid = (pthread_t)_beginthread( (void *) func, 0, arg ); + return ( (unsigned long)*tid == -1 ? -1 : 0 ); +} + +void +pthread_yield() +{ + +} + +void +pthread_exit( void ) +{ + _endthread( ); +} + +void +pthread_join( pthread_t tid, int *pStatus ) +{ + DWORD status; + status = WaitForSingleObject( tid, INFINITE ); + if ( pStatus != NULL) + { + if ( status != WAIT_FAILED ) + *pStatus = 0; + else + *pStatus = WAIT_ABANDONED; + } +} + + +void +pthread_kill( pthread_t tid, int sig ) +{ + return; +} + + +int +pthread_mutex_init( pthread_mutex_t *mp, pthread_mutexattr_t *attr ) +{ + *mp = CreateMutex( NULL, 0, NULL ); + return ( 0 ); +} + +int +pthread_mutex_destroy( pthread_mutex_t *mp ) +{ + CloseHandle( *mp ); + return ( 0 ); +} + +int +pthread_mutex_lock( pthread_mutex_t *mp ) +{ + WaitForSingleObject( *mp, INFINITE ); + return ( 0 ); +} + +int +pthread_mutex_unlock( pthread_mutex_t *mp ) +{ + ReleaseMutex( *mp ); + return ( 0 ); +} + +int +pthread_mutex_trylock( pthread_mutex_t *mp ) +{ + DWORD status; + + status = WaitForSingleObject( *mp, 0 ); + if ( (status == WAIT_FAILED) || (status == WAIT_TIMEOUT) ) + return 0; + else + return 1; +} + +int +pthread_cond_init( pthread_cond_t *cv, pthread_condattr_t *attr ) +{ + *cv = CreateEvent( NULL, FALSE, FALSE, NULL ); + return( 0 ); +} + +int +pthread_cond_destroy( pthread_cond_t *cv ) +{ + CloseHandle( *cv ); + return( 0 ); +} + +int +pthread_cond_wait( pthread_cond_t *cv, pthread_mutex_t *mp ) +{ + ReleaseMutex( *mp ); + WaitForSingleObject( *cv, INFINITE ); + WaitForSingleObject( *mp, INFINITE ); + return( 0 ); +} + +int +pthread_cond_signal( pthread_cond_t *cv ) +{ + SetEvent( *cv ); + return( 0 ); +} + +int +pthread_cond_broadcast( pthread_cond_t *cv ) +{ + SetEvent( *cv ); + return( 0 ); +} + #else /*********************************************************************** @@ -528,7 +676,7 @@ pthread_create( } void -pthread_yield() +pthread_yield( void ) { return; }