* AcessOS Microkernel Version
* messages.c
*/
+#define DEBUG 1
#include <acess.h>
#include <threads.h>
+#include <threads_int.h>
#include <errno.h>
+// === IMPORTS ===
+extern tShortSpinlock glThreadListLock;
+
// === CODE ===
/**
* \fn 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 );
// Check if thread is still alive
if(thread->Status == THREAD_STAT_DEAD) {
SHORTREL( &thread->IsLocked );
- return -1;
+ LEAVE_RET('i', -1);
}
// Create message
SHORTREL(&thread->IsLocked);
+ SHORTLOCK(&glThreadListLock);
Threads_Wake( thread );
+ SHORTREL(&glThreadListLock);
- return 0;
+ LEAVE_RET('i', 0);
}
/**