X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fmessages.c;h=afdcdbdeb8c3b353d90d1e809ab504ad12cf4580;hb=cbe0cc999c61fff862054bf428b7163e5458f2af;hp=2c0e448cf8d31be664ea7f9eb27a08784d2fba91;hpb=340bda1dddf444ccf46fbc9e7a37bf6c3f0aeb6a;p=tpg%2Facess2.git diff --git a/Kernel/messages.c b/Kernel/messages.c index 2c0e448c..afdcdbde 100644 --- a/Kernel/messages.c +++ b/Kernel/messages.c @@ -10,17 +10,17 @@ #include #include #include +#include // === CODE === /** - * \fn int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data) + * \fn int Proc_SendMessage(Uint Dest, int Length, void *Data) * \brief Send an IPC message - * \param Err Pointer to the errno variable * \param Dest Destination Thread * \param Length Length of the message * \param Data Message data */ -int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data) +int Proc_SendMessage(Uint Dest, int Length, void *Data) { tThread *thread; tMsg *msg; @@ -28,10 +28,13 @@ int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data) ENTER("pErr iDest iLength pData", Err, Dest, Length, Data); if(Length <= 0 || !Data) { - *Err = -EINVAL; + errno = -EINVAL; LEAVE_RET('i', -1); } + // TODO: Check message length against global/per-thread maximums + // TODO: Restrict queue length + // Get thread thread = Threads_GetThread( Dest ); @@ -64,23 +67,22 @@ int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data) } SHORTREL(&thread->IsLocked); - - SHORTLOCK(&glThreadListLock); + + // Wake the thread LOG("Waking %p (%i %s)", thread, thread->TID, thread->ThreadName); - Threads_Wake( thread ); - SHORTREL(&glThreadListLock); + Threads_PostEvent( thread, THREAD_EVENT_IPCMSG ); LEAVE_RET('i', 0); } /** - * \fn int Proc_GetMessage(Uint *Err, Uint *Source, void *Buffer) + * \fn int Proc_GetMessage(Uint *Source, void *Buffer) * \brief Gets a message - * \param Err Pointer to \a errno * \param Source Where to put the source TID * \param Buffer Buffer to place the message data (set to NULL to just get message length) + * \return Message length */ -int Proc_GetMessage(Uint *Err, Uint *Source, void *Buffer) +int Proc_GetMessage(Uint *Source, void *Buffer) { int ret; void *tmp; @@ -115,7 +117,7 @@ int Proc_GetMessage(Uint *Err, Uint *Source, void *Buffer) if( !CheckMem( Buffer, cur->Messages->Length ) ) { LOG("Invalid buffer"); - *Err = -EINVAL; + errno = -EINVAL; SHORTREL( &cur->IsLocked ); LEAVE('i', -1); return -1;