From: Ben Gras Date: Fri, 16 Jan 2015 13:24:24 +0000 (+0100) Subject: RS: synchronize priv from kernel after swap X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/zpipe.c?a=commitdiff_plain;h=refs%2Fchanges%2F24%2F3124%2F1;p=minix.git RS: synchronize priv from kernel after swap . make sure the priv id etc is maintained so future privctl talk about the right thing . solves broken IPC after update Change-Id: I17ed0212c22d634e6db1e80f8dcb2fb8bffe82c6 --- diff --git a/minix/servers/rs/update.c b/minix/servers/rs/update.c index 49e45f8ee..f6c6f200e 100644 --- a/minix/servers/rs/update.c +++ b/minix/servers/rs/update.c @@ -266,6 +266,7 @@ int sys_upd_flags; /* Swap slots here as well. */ pid = src_rp->r_pid; endpoint = src_rpub->endpoint; + swap_slot(&src_rp, &dst_rp); /* Reassign pids and endpoints. */ @@ -276,6 +277,12 @@ int sys_upd_flags; dst_rp->r_pub->endpoint = endpoint; rproc_ptr[_ENDPOINT_P(dst_rp->r_pub->endpoint)] = dst_rp; + /* Update in-RS priv structs */ + if ((r = sys_getpriv(&src_rp->r_priv, src_rp->r_pub->endpoint)) != OK) + panic("RS: update: could not update RS copies of priv of src: %d\n", r); + if ((r = sys_getpriv(&dst_rp->r_priv, dst_rp->r_pub->endpoint)) != OK) + panic("RS: update: could not update RS copies of priv of dst: %d\n", r); + /* Adjust input pointers. */ *src_rpp = src_rp; *dst_rpp = dst_rp;