diff --git a/kernel/proc.c b/kernel/proc.c index 193b6862d..7062c5899 100644 --- a/kernel/proc.c +++ b/kernel/proc.c @@ -684,6 +684,20 @@ int flags; } } + /* Check if there are pending senda(). */ + if (caller_ptr->p_misc_flags & MF_ASYNMSG) + { + if (src_e != ANY) + r= try_one(proc_addr(src_p), caller_ptr, NULL); + else + r= try_async(caller_ptr); + + if (r == OK) { + IPC_STATUS_ADD(caller_ptr, IPC_STATUS_CALL_TO(SENDA)); + return OK; /* Got a message */ + } + } + /* Check caller queue. Use pointer pointers to keep code simple. */ xpp = &caller_ptr->p_caller_q; while (*xpp != NIL_PROC) { @@ -706,19 +720,6 @@ int flags; } xpp = &(*xpp)->p_q_link; /* proceed to next */ } - - if (caller_ptr->p_misc_flags & MF_ASYNMSG) - { - if (src_e != ANY) - r= try_one(proc_addr(src_p), caller_ptr, NULL); - else - r= try_async(caller_ptr); - - if (r == OK) { - IPC_STATUS_ADD(caller_ptr, IPC_STATUS_CALL_TO(SENDA)); - return OK; /* Got a message */ - } - } } /* No suitable message is available or the caller couldn't send in SENDREC.