]> Zhao Yanbai Git Server - minix.git/commitdiff
inline sendnb should not call send vector 28/628/2
authorBen Gras <ben@minix3.org>
Tue, 11 Jun 2013 15:13:52 +0000 (15:13 +0000)
committerBen Gras <ben@minix3.org>
Wed, 12 Jun 2013 07:04:53 +0000 (07:04 +0000)
. also vfs has to reply to a vm call - so use asynsend for that

Change-Id: I30ac1e591191dea5c99e25b03151a4415d1151b0

include/minix/ipc.h
servers/vfs/misc.c

index 85b84e9c77fafbc58eadc9aa6d7ed757340e7b0e..e2ddcfa32dd6461b4eedf31f2d84a3ac8ea30c6a 100644 (file)
@@ -227,7 +227,7 @@ static inline int _sendrec(endpoint_t src_dest, message *m_ptr)
 
 static inline int _sendnb(endpoint_t dest, message *m_ptr)
 {
-       return _minix_ipcvecs.send(dest, m_ptr);
+       return _minix_ipcvecs.sendnb(dest, m_ptr);
 }
 
 static inline int _notify(endpoint_t dest)
index 9dddfd5fe633b64b88f87b0b459bf6e598afe709..6d9a7269e0c7d123f9c3eced536696182aabe9f7 100644 (file)
@@ -382,6 +382,7 @@ int do_vm_call(message *m_out)
        int slot;
        struct fproc *rfp, *vmf;
        struct filp *f = NULL;
+       int r;
 
        if(job_m_in.m_source != VM_PROC_NR)
                return ENOSYS;
@@ -468,7 +469,16 @@ reqdone:
        m_out->VMV_RESULT = result;
        m_out->VMV_REQID = req_id;
 
-       return VM_VFS_REPLY;
+       /* reply asynchronously as VM may not be able to receive
+        * a sendnb() message
+        */
+
+       m_out->m_type = VM_VFS_REPLY;
+       r = asynsend3(VM_PROC_NR, m_out, 0);
+       if(r != OK) printf("VFS: couldn't asynsend3() to VM\n");
+
+       /* VFS does not reply any further */
+       return SUSPEND;
 }
 
 /*===========================================================================*