diff options
author | neal <neal> | 2008-06-23 19:48:34 +0000 |
---|---|---|
committer | neal <neal> | 2008-06-23 19:48:34 +0000 |
commit | 486cab8528a7face71ee827157311272a563f9c5 (patch) | |
tree | fdfca2491e08e92848924a45272c6e600027180f /viengoos | |
parent | 4efa44a9da99bbdd433bb162a612942eff90e78b (diff) |
2008-06-23 Neal H. Walfield <neal@gnu.org>
* server.c (server_loop): In the cap_copy implementation, if the
caller updates the capability's policy, if the object is in
memory, also update it appropriately.
Diffstat (limited to 'viengoos')
-rw-r--r-- | viengoos/ChangeLog | 6 | ||||
-rw-r--r-- | viengoos/server.c | 19 |
2 files changed, 20 insertions, 5 deletions
diff --git a/viengoos/ChangeLog b/viengoos/ChangeLog index 7081af3..eaaeba5 100644 --- a/viengoos/ChangeLog +++ b/viengoos/ChangeLog @@ -1,5 +1,11 @@ 2008-06-23 Neal H. Walfield <neal@gnu.org> + * server.c (server_loop): In the cap_copy implementation, if the + caller updates the capability's policy, if the object is in + memory, also update it appropriately. + +2008-06-23 Neal H. Walfield <neal@gnu.org> + * activity.h (struct activity): Add field frames_pending_eviction. Note that we now include frames that are in the laundry in the FRAMES_TOTAL and FRAMES_LOCAL variables. diff --git a/viengoos/server.c b/viengoos/server.c index 797108a..c6b337c 100644 --- a/viengoos/server.c +++ b/viengoos/server.c @@ -912,19 +912,28 @@ server_loop (void) /* The caller changed the policy. Also change it on the object. */ { - struct object *object = cap_to_object_soft (principal, target); + struct object *object = cap_to_object_soft (principal, + target); if (object) { - struct object_desc *desc = object_to_object_desc (object); + struct object_desc *desc + = object_to_object_desc (object); + bool claim = false; + + struct object_policy p = desc->policy; /* XXX: This should only be allowed if TARGET grants writable access to the object. */ if ((flags & CAP_COPY_DISCARDABLE_SET)) - desc->policy.discardable = properties.policy.discardable; + p.discardable = properties.policy.discardable; + /* Only the current claimant can set the + priority. */ if ((flags & CAP_COPY_PRIORITY_SET) && desc->activity == principal) - desc->policy.priority = properties.policy.priority; + p.priority = properties.policy.priority; + + object_desc_claim (desc->activity, desc, p, true); } } @@ -1308,7 +1317,7 @@ server_loop (void) if (err) REPLY (err); - panic ("Collecting exception: %x.%x", from); + panic ("Collecting exception: %x", from); #warning exception_collect not implemented /* XXX: Implement me. */ |