libblockdriver: allow for mixed sync/async replies
This commit is contained in:
		
							parent
							
								
									db087efac4
								
							
						
					
					
						commit
						8a0b9de41a
					
				| @ -146,11 +146,15 @@ PUBLIC void blockdriver_reply(message *m_ptr, int ipc_status, int reply) | |||||||
|   m_ptr->BDEV_STATUS = reply; |   m_ptr->BDEV_STATUS = reply; | ||||||
|   m_ptr->BDEV_ID = id; |   m_ptr->BDEV_ID = id; | ||||||
| 
 | 
 | ||||||
|   /* If we would block sending the message, send it asynchronously. */ |   /* If we would block sending the message, send it asynchronously. The NOREPLY
 | ||||||
|  |    * flag is set because the caller may also issue a SENDREC (mixing sync and | ||||||
|  |    * async comm), and the asynchronous reply could otherwise end up satisfying | ||||||
|  |    * the SENDREC's receive part, after which our next SENDNB call would fail. | ||||||
|  |    */ | ||||||
|   if (IPC_STATUS_CALL(ipc_status) == SENDREC) |   if (IPC_STATUS_CALL(ipc_status) == SENDREC) | ||||||
| 	r = sendnb(caller_e, m_ptr); | 	r = sendnb(caller_e, m_ptr); | ||||||
|   else |   else | ||||||
| 	r = asynsend(caller_e, m_ptr); | 	r = asynsend3(caller_e, m_ptr, AMF_NOREPLY); | ||||||
| 
 | 
 | ||||||
|   if (r != OK) |   if (r != OK) | ||||||
| 	printf("blockdriver_reply: unable to send reply to %d: %d\n", | 	printf("blockdriver_reply: unable to send reply to %d: %d\n", | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 David van Moolenbroek
						David van Moolenbroek