Tools/NetTest - Add a runner to test networking stack
[tpg/acess2.git] / Tools / nativelib / threads_int.c
index b2ad9f6..8ab9b34 100644 (file)
@@ -4,6 +4,9 @@
  *
  * threads_int.c
  * - Internal threading functions
+ *
+ * POSIX Mutex/Semaphore management
+ * Wait state
  */
 #include <stddef.h>
 #include <stdlib.h>
@@ -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;
+       }
 }
-

UCC git Repository :: git.ucc.asn.au