summaryrefslogtreecommitdiff
path: root/viengoos
diff options
context:
space:
mode:
authorneal <neal>2008-06-23 19:48:34 +0000
committerneal <neal>2008-06-23 19:48:34 +0000
commit486cab8528a7face71ee827157311272a563f9c5 (patch)
treefdfca2491e08e92848924a45272c6e600027180f /viengoos
parent4efa44a9da99bbdd433bb162a612942eff90e78b (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/ChangeLog6
-rw-r--r--viengoos/server.c19
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. */