MF_REPLY_PEND should be removed when sendrec finishes

This commit is contained in:
Tomas Hruby 2010-06-28 08:32:49 +00:00
parent b9f53528ee
commit 67fa273d00

View file

@ -559,6 +559,10 @@ PUBLIC int mini_send(
call = (caller_ptr->p_misc_flags & MF_REPLY_PEND ? SENDREC call = (caller_ptr->p_misc_flags & MF_REPLY_PEND ? SENDREC
: (flags & NON_BLOCKING ? SENDNB : SEND)); : (flags & NON_BLOCKING ? SENDNB : SEND));
IPC_STATUS_ADD_CALL(dst_ptr, call); IPC_STATUS_ADD_CALL(dst_ptr, call);
if (dst_ptr->p_misc_flags & MF_REPLY_PEND)
dst_ptr->p_misc_flags &= ~MF_REPLY_PEND;
RTS_UNSET(dst_ptr, RTS_RECEIVING); RTS_UNSET(dst_ptr, RTS_RECEIVING);
#if DEBUG_DUMPIPC #if DEBUG_DUMPIPC
@ -677,7 +681,7 @@ PRIVATE int mini_receive(struct proc * caller_ptr,
IPC_STATUS_ADD_CALL(caller_ptr, NOTIFY); IPC_STATUS_ADD_CALL(caller_ptr, NOTIFY);
return(OK); goto receive_done;
} }
} }
@ -691,7 +695,7 @@ PRIVATE int mini_receive(struct proc * caller_ptr,
if (r == OK) { if (r == OK) {
IPC_STATUS_ADD_CALL(caller_ptr, SENDA); IPC_STATUS_ADD_CALL(caller_ptr, SENDA);
return OK; /* Got a message */ goto receive_done;
} }
} }
@ -733,7 +737,7 @@ PRIVATE int mini_receive(struct proc * caller_ptr,
*xpp = sender->p_q_link; /* remove from queue */ *xpp = sender->p_q_link; /* remove from queue */
sender->p_q_link = NULL; sender->p_q_link = NULL;
return(OK); /* report success */ goto receive_done;
} }
xpp = &sender->p_q_link; /* proceed to next */ xpp = &sender->p_q_link; /* proceed to next */
} }
@ -754,6 +758,11 @@ PRIVATE int mini_receive(struct proc * caller_ptr,
} else { } else {
return(ENOTREADY); return(ENOTREADY);
} }
receive_done:
if (caller_ptr->p_misc_flags & MF_REPLY_PEND)
caller_ptr->p_misc_flags &= ~MF_REPLY_PEND;
return OK;
} }
/*===========================================================================* /*===========================================================================*