diff options
author | neal <neal> | 2007-11-29 11:02:15 +0000 |
---|---|---|
committer | neal <neal> | 2007-11-29 11:02:15 +0000 |
commit | 3690e1d7477b6b0964eb8e197bc6b5fd22a7abd8 (patch) | |
tree | 1f6e22fcd3fc1d71bd580ceff666906ff3981474 /viengoos/cap-lookup.c | |
parent | 6aadbf79f4e91060081e6b454054b9993a7bdd6c (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.c | 36 |
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; } |