X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fmessages.c;h=ce23d6b14f043a90483d229a379e9a2b5be6f5d9;hb=425494c449d668bf4728eef3a45f890432fd9999;hp=4765d65e5ef972b2eadf9ea7c1f0c8b94af03766;hpb=7d881c2e5fef91a6570e46ef69a5d4a5cf0e8b4d;p=tpg%2Facess2.git diff --git a/Kernel/messages.c b/Kernel/messages.c index 4765d65e..ce23d6b1 100644 --- a/Kernel/messages.c +++ b/Kernel/messages.c @@ -2,10 +2,15 @@ * AcessOS Microkernel Version * messages.c */ +#define DEBUG 1 #include #include +#include #include +// === IMPORTS === +extern tShortSpinlock glThreadListLock; + // === CODE === /** * \fn int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data) @@ -20,18 +25,18 @@ int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data) tThread *thread; tMsg *msg; - Log("Proc_SendMessage: (Err=%p, Dest=%i, Length=%i, Data=%p)", Err, Dest, Length, Data); + ENTER("pErr iDest iLength pData", Err, Dest, Length, Data); if(Length <= 0 || !Data) { *Err = -EINVAL; - return -1; + LEAVE_RET('i', -1); } // Get thread thread = Threads_GetThread( Dest ); // Error check - if(!thread) { return -1; } + if(!thread) LEAVE_RET('i', -1); // Get Spinlock SHORTLOCK( &thread->IsLocked ); @@ -39,7 +44,7 @@ int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data) // Check if thread is still alive if(thread->Status == THREAD_STAT_DEAD) { SHORTREL( &thread->IsLocked ); - return -1; + LEAVE_RET('i', -1); } // Create message @@ -60,9 +65,11 @@ int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data) SHORTREL(&thread->IsLocked); + SHORTLOCK(&glThreadListLock); Threads_Wake( thread ); + SHORTREL(&glThreadListLock); - return 0; + LEAVE_RET('i', 0); } /**