X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Tools%2Fnativelib%2Fthreads_int.c;fp=Tools%2Fnativelib%2Fthreads_int.c;h=8ab9b341497989c1e08eb0d4a5f21e1ad679d4a6;hb=50a98c40481c6d1df267f4631228e9a4d107fe74;hp=b2ad9f661667835a6359bb9157772f35d054baaa;hpb=7b64f5e7f00e445a5637e9e3289a1332a14d28e5;p=tpg%2Facess2.git diff --git a/Tools/nativelib/threads_int.c b/Tools/nativelib/threads_int.c index b2ad9f66..8ab9b341 100644 --- a/Tools/nativelib/threads_int.c +++ b/Tools/nativelib/threads_int.c @@ -4,6 +4,9 @@ * * threads_int.c * - Internal threading functions + * + * POSIX Mutex/Semaphore management + * Wait state */ #include #include @@ -28,7 +31,7 @@ int Threads_int_ThreadingEnabled(void) tThreadIntMutex *Threads_int_MutexCreate(void) { - if( pthread_mutex_init ) + if( Threads_int_ThreadingEnabled() ) { tThreadIntMutex *ret = malloc(sizeof(pthread_mutex_t)); pthread_mutex_init( (void*)ret, NULL ); @@ -45,7 +48,7 @@ void Threads_int_MutexLock(tThreadIntMutex *Mutex) if( !Mutex ) { return ; } - if( pthread_mutex_lock ) + if( Threads_int_ThreadingEnabled() ) { pthread_mutex_lock( (void*)Mutex ); } @@ -63,7 +66,7 @@ void Threads_int_MutexRelease(tThreadIntMutex *Mutex) return ; } - if( pthread_mutex_unlock ) + if( Threads_int_ThreadingEnabled() ) { pthread_mutex_unlock( (void*)Mutex ); } @@ -77,7 +80,7 @@ void Threads_int_MutexRelease(tThreadIntMutex *Mutex) tThreadIntSem *Threads_int_SemCreate(void) { - if( sem_init ) + if( Threads_int_ThreadingEnabled() ) { tThreadIntSem *ret = malloc(sizeof(sem_t)); sem_init( (void*)ret, 0, 0 ); @@ -91,7 +94,7 @@ tThreadIntSem *Threads_int_SemCreate(void) void Threads_int_SemSignal(tThreadIntSem *Sem) { - if( sem_post ) + if( Threads_int_ThreadingEnabled() ) { sem_post( (void*)Sem ); } @@ -103,7 +106,7 @@ void Threads_int_SemSignal(tThreadIntSem *Sem) void Threads_int_SemWaitAll(tThreadIntSem *Sem) { - if( sem_wait ) + if( Threads_int_ThreadingEnabled() ) { // TODO: Handle multiples sem_wait( (void*)Sem ); @@ -129,7 +132,7 @@ void *Threads_int_ThreadRoot(void *ThreadPtr) int Threads_int_CreateThread(tThread *Thread) { - if( pthread_create ) + if( Threads_int_ThreadingEnabled() ) { pthread_t *pthread = malloc(sizeof(pthread_t)); Thread->ThreadHandle = pthread; @@ -144,12 +147,7 @@ int Threads_int_CreateThread(tThread *Thread) void SHORTLOCK(tShortSpinlock *Lock) { - if( !pthread_mutex_init ) - { - if(*Lock) Log_KernelPanic("---", "Double short lock"); - *Lock = (void*)1; - } - else + if( Threads_int_ThreadingEnabled() ) { if( !*Lock ) { *Lock = malloc(sizeof(pthread_mutex_t)); @@ -159,24 +157,36 @@ void SHORTLOCK(tShortSpinlock *Lock) pthread_mutex_lock(*Lock); // printf("%p: SHORTLOCK held %p\n", lpThreads_This, __builtin_return_address(0)); } + else + { + if(*Lock) Log_KernelPanic("---", "Double short lock"); + *Lock = (void*)1; + } } void SHORTREL(tShortSpinlock *Lock) { - if( !pthread_mutex_init ) + if( Threads_int_ThreadingEnabled() ) { - if(!*Lock) Log_Notice("---", "Short release when not held"); - *Lock = NULL; + pthread_mutex_unlock(*Lock); +// printf("%p: SHORTLOCK rel\n", lpThreads_This); } else { - pthread_mutex_unlock(*Lock); -// printf("%p: SHORTLOCK rel\n", lpThreads_This); + if(!*Lock) Log_Notice("---", "Short release when not held"); + *Lock = NULL; } } int CPU_HAS_LOCK(tShortSpinlock *Lock) { - return 0; + if( Threads_int_ThreadingEnabled() ) + { + Log_KernelPanic("---", "TODO: CPU_HAS_LOCK with threading enabled"); + return 0; + } + else + { + return 0; + } } -