summaryrefslogtreecommitdiff
path: root/viengoos/activity.c
diff options
context:
space:
mode:
authorneal <neal>2007-12-10 22:38:12 +0000
committerneal <neal>2007-12-10 22:38:12 +0000
commit6460869932bf5900aefa6793f2a4c8d0df33a686 (patch)
tree446f6ff92407d800799b34c1801ac46458599535 /viengoos/activity.c
parentd9c3f0b253ccbb3153e70a9fcb47c24276044cc1 (diff)
2007-12-10 Neal H. Walfield <neal@gnu.org>
* object.h (lru_lock): New declaration. (LINK_TEMPLATE): Assert that LRU_LOCK is held. (object_desc_disown_simple): Likewise. (object_disown_simple): Likewise. (object_desc_disown): Likewise. (object_disown): Likewise. (object_desc_claim): Likewise. (object_claim): Likewise. * object.c (lru_lock): Define. (memory_object_alloc): Lock LRU_LOCK when manipulating the LRU lists. (memory_object_destroy): Likewise. (object_find_soft): Likewise. (folio_free): Likewise. (folio_object_alloc): Likewise. * activity.c (activity_destroy): Lock LRU_LOCK when manipulating the LRU lists. (activity_destroy): Likewise. (activity_dump): Likewise. (activity_consistency_check_): Assert that LRU_LOCK is held. * ager.c (ager_loop): Lock LRU_LOCK when manipulating the LRU lists. * Makefile.am (t_link_CPPFLAGS): Include $(srcdir)/t-environment.h. (t_link_SOURCES): Add output.h, output.c and output-stdio.c. * t-environment.h: Move includes down. (environment_kip) [! _L4_TEST_MAIN]: Don't define, only declare. Remove static qualifier. (environment_api_version) [! _L4_TEST_MAIN]: Likewise. (environment_api_flags) [! _L4_TEST_MAIN]: Likewise. (environment_kernel_id) [! _L4_TEST_MAIN]: Likewise. (environment_utcb) [! _L4_TEST_MAIN]: Likewise. (environment_utcb_address) [! _L4_TEST_MAIN]: Likewise. (environment_init): Initialize ENVIRONMENT_UTCB_ADDRESS[_L4_UTCB_MY_GLOBAL_ID] to a non-NULL value. * t-link.c: Include "t-environment.h". (_L4_TEST_MAIN): Define. (program_name): Don't define. (lru_lock): Define. (main): Rename from this... (test): ... to this. Lock LRU_LOCK on entry and unlock on exit.
Diffstat (limited to 'viengoos/activity.c')
-rw-r--r--viengoos/activity.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/viengoos/activity.c b/viengoos/activity.c
index 187fc3f..999f88a 100644
--- a/viengoos/activity.c
+++ b/viengoos/activity.c
@@ -119,6 +119,7 @@ activity_destroy (struct activity *activity, struct activity *victim)
}
/* Disown all allocated memory objects. */
+ ss_mutex_lock (&lru_lock);
struct object_desc *desc;
int count = 0;
while ((desc = victim->active))
@@ -136,6 +137,8 @@ activity_destroy (struct activity *activity, struct activity *victim)
object_desc_disown_simple (desc);
count ++;
}
+ ss_mutex_unlock (&lru_lock);
+
activity_charge (victim, -count);
do_debug (1)
@@ -147,8 +150,10 @@ activity_destroy (struct activity *activity, struct activity *victim)
activity_dump (root_activity);
struct object_desc *desc;
+ ss_mutex_lock (&lru_lock);
for (desc = victim->active; desc; desc = desc->activity_lru.next)
debug (0, " %llx: %s", desc->oid, cap_type_string (desc->type));
+ ss_mutex_unlock (&lru_lock);
}
assert (victim->frames == 0);
assert (victim->folio_count == 0);
@@ -217,7 +222,11 @@ do_activity_dump (struct activity *activity, int indent)
void
activity_dump (struct activity *activity)
{
+ ss_mutex_lock (&lru_lock);
+
do_activity_dump (activity, 0);
+
+ ss_mutex_unlock (&lru_lock);
}
@@ -228,6 +237,8 @@ activity_consistency_check_ (const char *func, int line,
/* The number of objects on the active and inactive lists plus the
objects owned by the descendents must equal activity->frames. */
+ assert (! ss_mutex_trylock (&lru_lock));
+
int active = 0;
struct object_desc *d;
for (d = activity->active; d; d = d->activity_lru.next)