MF_REPLY_PEND should be removed when sendrec finishes
This commit is contained in:
		
							parent
							
								
									b9f53528ee
								
							
						
					
					
						commit
						67fa273d00
					
				@ -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;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*===========================================================================*
 | 
					/*===========================================================================*
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user