diff options
author | Neal H. Walfield <neal@gnu.org> | 2008-12-18 16:54:27 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@gnu.org> | 2008-12-18 16:54:27 +0100 |
commit | 60a851e8caed8f1d79e943b3eb099690e72e0c89 (patch) | |
tree | c6a31a36797c3eb6c5eb383d192f105c9d88de04 | |
parent | 21b900f421e258eb8c4f293de45cd88ce638456e (diff) |
Use the first capability in a message to designate the reply messenger.
libviengoos/
2008-12-18 Neal H. Walfield <neal@gnu.org>
* viengoos/rpc.h (RPC_SEND_MARSHAL): Make the reply messenger the
first capability.
(RPC_SEND_UNMARSHAL): Likewise.
viengoos/
2008-12-18 Neal H. Walfield <neal@gnu.org>
* server.c (server_loop): Use the first capability as the reply
messenger.
-rw-r--r-- | libviengoos/ChangeLog | 6 | ||||
-rw-r--r-- | libviengoos/viengoos/rpc.h | 13 | ||||
-rw-r--r-- | viengoos/ChangeLog | 5 | ||||
-rw-r--r-- | viengoos/server.c | 3 |
4 files changed, 19 insertions, 8 deletions
diff --git a/libviengoos/ChangeLog b/libviengoos/ChangeLog index c7670b7..b21f285 100644 --- a/libviengoos/ChangeLog +++ b/libviengoos/ChangeLog @@ -1,5 +1,11 @@ 2008-12-18 Neal H. Walfield <neal@gnu.org> + * viengoos/rpc.h (RPC_SEND_MARSHAL): Make the reply messenger the + first capability. + (RPC_SEND_UNMARSHAL): Likewise. + +2008-12-18 Neal H. Walfield <neal@gnu.org> + * RPC: Move here from ../hurd. 2008-12-18 Neal H. Walfield <neal@gnu.org> diff --git a/libviengoos/viengoos/rpc.h b/libviengoos/viengoos/rpc.h index 7ede9ce..7817f54 100644 --- a/libviengoos/viengoos/rpc.h +++ b/libviengoos/viengoos/rpc.h @@ -385,10 +385,10 @@ typedef vg_addr_t cap_t; vg_message_clear (msg); \ /* Add the label. */ \ vg_message_append_word (msg, RPC_ID_PREFIX_(id)); \ - /* Then load the arguments. */ \ - RPCLOAD (icount, ##__VA_ARGS__); \ - /* Finally, add the reply messenger. */ \ + /* The reply messenger. */ \ vg_message_append_cap (msg, reply_messenger); \ + /* And finally, load the arguments. */ \ + RPCLOAD (icount, ##__VA_ARGS__); \ } /* Unmarshal a request. */ @@ -410,8 +410,11 @@ typedef vg_addr_t cap_t; return EINVAL; \ } \ \ + if (reply_messenger) \ + *reply_messenger = vg_message_cap (msg, 0); \ + \ int __rsu_data_idx __attribute__ ((unused)) = 1; \ - int __rsu_cap_idx __attribute__ ((unused)) = 0; \ + int __rsu_cap_idx __attribute__ ((unused)) = 1; \ error_t __rsu_err = 0; \ RPCSTORE (icount, ##__VA_ARGS__); \ if (unlikely (__rsu_err \ @@ -427,8 +430,6 @@ typedef vg_addr_t cap_t; return EINVAL; \ } \ \ - if (reply_messenger) \ - *reply_messenger = vg_message_cap (msg, __rsu_cap_idx); \ return 0; \ } diff --git a/viengoos/ChangeLog b/viengoos/ChangeLog index 45e3415..6dace36 100644 --- a/viengoos/ChangeLog +++ b/viengoos/ChangeLog @@ -1,3 +1,8 @@ +2008-12-18 Neal H. Walfield <neal@gnu.org> + + * server.c (server_loop): Use the first capability as the reply + messenger. + 2008-12-17 Neal H. Walfield <neal@gnu.org> * ager.c (update_stats): Use vg_activity_info_reply, not diff --git a/viengoos/server.c b/viengoos/server.c index 26b73d0..3314e60 100644 --- a/viengoos/server.c +++ b/viengoos/server.c @@ -974,8 +974,7 @@ server_loop (void) object will just result in a discarded EINVAL. */ reply = (struct messenger *) OBJECT (&thread->aspace, - vg_message_cap (message, - vg_message_cap_count (message) - 1), + vg_message_cap (message, 0), vg_cap_rmessenger, false, NULL); /* There are a number of methods that look up an object relative |