summaryrefslogtreecommitdiff
path: root/viengoos/cap-lookup.c
diff options
context:
space:
mode:
authorneal <neal>2007-11-29 11:02:15 +0000
committerneal <neal>2007-11-29 11:02:15 +0000
commit3690e1d7477b6b0964eb8e197bc6b5fd22a7abd8 (patch)
tree1f6e22fcd3fc1d71bd580ceff666906ff3981474 /viengoos/cap-lookup.c
parent6aadbf79f4e91060081e6b454054b9993a7bdd6c (diff)
hurd/
2007-11-29 Neal H. Walfield <neal@gnu.org> * cap.h [! RM_INTERN]: Include <pthread.h>. (as_lock) [! RM_INTERN]: New declaration. (cap_lookup_rel): Add comment about locking. (object_lookup_rel): Likewise. (slot_lookup_rel): Likewise. viengoos/ 2007-11-29 Neal H. Walfield <neal@gnu.org> * as.c [! RM_INTERN] (as_lock): New declaration. (as_slot_ensure_full) [! RM_INTERN]: Take AS_LOCK. (as_insert) [! RM_INTERN]: Likewise. * cap-lookup.c (cap_lookup_rel) [! RM_INTERN]: Likewise. (object_lookup_rel) [! RM_INTERN]: Likewise. (slot_lookup_rel) [! RM_INTERN]: Likewise.
Diffstat (limited to 'viengoos/cap-lookup.c')
-rw-r--r--viengoos/cap-lookup.c36
1 files changed, 33 insertions, 3 deletions
diff --git a/viengoos/cap-lookup.c b/viengoos/cap-lookup.c
index b1de9cd..2d67e1b 100644
--- a/viengoos/cap-lookup.c
+++ b/viengoos/cap-lookup.c
@@ -291,7 +291,17 @@ cap_lookup_rel (activity_t activity,
{
union rt rt;
- if (! lookup (activity, root, address, type, writable, want_cap, &rt))
+#ifndef RM_INTERN
+ pthread_rwlock_rdlock (&as_lock);
+#endif
+
+ bool ret = lookup (activity, root, address, type, writable, want_cap, &rt);
+
+#ifndef RM_INTERN
+ pthread_rwlock_unlock (&as_lock);
+#endif
+
+ if (! ret)
return (struct cap) { .type = cap_void };
return rt.cap;
}
@@ -303,7 +313,17 @@ object_lookup_rel (activity_t activity,
{
union rt rt;
- if (! lookup (activity, root, address, type, writable, want_object, &rt))
+#ifndef RM_INTERN
+ pthread_rwlock_rdlock (&as_lock);
+#endif
+
+ bool ret = lookup (activity, root, address, type, writable, want_object, &rt);
+
+#ifndef RM_INTERN
+ pthread_rwlock_unlock (&as_lock);
+#endif
+
+ if (! ret)
return (struct cap) { .type = cap_void };
return rt.cap;
}
@@ -315,7 +335,17 @@ slot_lookup_rel (activity_t activity,
{
union rt rt;
- if (! lookup (activity, root, address, type, writable, want_slot, &rt))
+#ifndef RM_INTERN
+ pthread_rwlock_rdlock (&as_lock);
+#endif
+
+ bool ret = lookup (activity, root, address, type, writable, want_slot, &rt);
+
+#ifndef RM_INTERN
+ pthread_rwlock_unlock (&as_lock);
+#endif
+
+ if (! ret)
return NULL;
return rt.capp;
}