summaryrefslogtreecommitdiff
path: root/viengoos
diff options
context:
space:
mode:
authorneal <neal>2007-12-11 23:35:03 +0000
committerneal <neal>2007-12-11 23:35:03 +0000
commitdbcabeac4e8233e2bae5d8bdc89a96c051d8d7b8 (patch)
tree67a5d65867ac94a337ae2e9f4658e185cac82b63 /viengoos
parentb1adfc140c8106e72b1d5320cc0c9408a4123d79 (diff)
2007-12-12 Neal H. Walfield <neal@gnu.org>
* activity.h: Update comment. * activity.c (activity_consistency_check_): Don't assert that LRU_LOCK is held. * object.h (object_disown_simple): Don't call activity_consistency_check here. (object_desc_disown_): Likewise. (object_desc_claim_): Likewise. (object_desc_claim_): Likewise. * object.c (memory_object_alloc): Call activity_consistency_check. (memory_object_destroy): Likewise. (object_find_soft): Likewise. (folio_free): Likewise. (folio_object_alloc): Likewise.
Diffstat (limited to 'viengoos')
-rw-r--r--viengoos/ChangeLog16
-rw-r--r--viengoos/activity.c2
-rw-r--r--viengoos/activity.h3
-rw-r--r--viengoos/object.c15
-rw-r--r--viengoos/object.h12
5 files changed, 33 insertions, 15 deletions
diff --git a/viengoos/ChangeLog b/viengoos/ChangeLog
index cd166b8..81b2f5a 100644
--- a/viengoos/ChangeLog
+++ b/viengoos/ChangeLog
@@ -1,3 +1,19 @@
+2007-12-12 Neal H. Walfield <neal@gnu.org>
+
+ * activity.h: Update comment.
+ * activity.c (activity_consistency_check_): Don't assert that
+ LRU_LOCK is held.
+ * object.h (object_disown_simple): Don't call
+ activity_consistency_check here.
+ (object_desc_disown_): Likewise.
+ (object_desc_claim_): Likewise.
+ (object_desc_claim_): Likewise.
+ * object.c (memory_object_alloc): Call activity_consistency_check.
+ (memory_object_destroy): Likewise.
+ (object_find_soft): Likewise.
+ (folio_free): Likewise.
+ (folio_object_alloc): Likewise.
+
2007-12-11 Neal H. Walfield <neal@gnu.org>
* as.h (as_compute_gbits_cappage): Remove debugging code.
diff --git a/viengoos/activity.c b/viengoos/activity.c
index ff9b54c..7154e38 100644
--- a/viengoos/activity.c
+++ b/viengoos/activity.c
@@ -233,8 +233,6 @@ 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)
diff --git a/viengoos/activity.h b/viengoos/activity.h
index fefeb1f..7b82322 100644
--- a/viengoos/activity.h
+++ b/viengoos/activity.h
@@ -156,7 +156,8 @@ activity_charge (struct activity *activity, int objects)
extern void activity_dump (struct activity *activity);
-/* Perform a consistency checl on the activity ACTIVITY. */
+/* Perform a consistency checl on the activity ACTIVITY. Will take
+ LRU_LOCK. */
extern void activity_consistency_check_ (const char *func, int line,
struct activity *activity);
#define activity_consistency_check(a) \
diff --git a/viengoos/object.c b/viengoos/object.c
index 4ecd40c..b9f8ab0 100644
--- a/viengoos/object.c
+++ b/viengoos/object.c
@@ -140,6 +140,9 @@ memory_object_alloc (struct activity *activity,
ss_mutex_unlock (&lru_lock);
+ if (activity)
+ activity_consistency_check (activity);
+
return object;
}
@@ -159,6 +162,8 @@ memory_object_destroy (struct activity *activity, struct object *object)
struct cap cap = object_desc_to_cap (odesc);
cap_shootdown (activity, &cap);
+ struct activity *owner = odesc->activity;
+
ss_mutex_lock (&lru_lock);
object_desc_disown (odesc);
@@ -166,6 +171,8 @@ memory_object_destroy (struct activity *activity, struct object *object)
object_global_lru_unlink (odesc);
ss_mutex_unlock (&lru_lock);
+ activity_consistency_check (owner);
+
if (odesc->type == cap_activity_control)
{
struct activity *a = (struct activity *) object;
@@ -207,6 +214,8 @@ object_find_soft (struct activity *activity, oid_t oid)
ss_mutex_lock (&lru_lock);
object_desc_claim (activity, odesc);
ss_mutex_unlock (&lru_lock);
+
+ activity_consistency_check (activity);
}
return object;
@@ -432,10 +441,14 @@ folio_free (struct activity *activity, struct folio *folio)
folio->prev.type = cap_void;
/* Disown the frame. */
+ owner = fdesc->activity;
+
ss_mutex_lock (&lru_lock);
object_disown ((struct object *) folio);
ss_mutex_unlock (&lru_lock);
+ activity_consistency_check (owner);
+
/* And free the folio. */
folio->folio_version = fdesc->version ++;
bit_dealloc (folios, fdesc->oid / (FOLIO_OBJECTS + 1));
@@ -511,6 +524,8 @@ folio_object_alloc (struct activity *activity,
ss_mutex_lock (&lru_lock);
object_desc_claim (activity, odesc);
ss_mutex_unlock (&lru_lock);
+
+ activity_consistency_check (activity);
}
odesc->type = type;
diff --git a/viengoos/object.h b/viengoos/object.h
index 4c1aecc..fb8c93c 100644
--- a/viengoos/object.h
+++ b/viengoos/object.h
@@ -323,22 +323,14 @@ object_desc_disown_simple (struct object_desc *desc)
static inline void
object_disown_simple (struct object *object)
{
- assert (! ss_mutex_trylock (&lru_lock));
-
object_desc_disown_simple (object_to_object_desc (object));
}
static inline void
object_desc_disown_ (struct object_desc *desc)
{
- struct activity *activity = desc->activity;
-
- activity_consistency_check (activity);
-
activity_charge (desc->activity, -1);
object_desc_disown_simple (desc);
-
- activity_consistency_check (activity);
}
#define object_desc_disown(d) \
({ debug (5, "object_desc_disown: %p (%d)", \
@@ -364,8 +356,6 @@ object_disown_ (struct object *object)
static inline void
object_desc_claim_ (struct activity *activity, struct object_desc *desc)
{
- activity_consistency_check (activity);
-
if (desc->activity == activity)
return;
@@ -377,8 +367,6 @@ object_desc_claim_ (struct activity *activity, struct object_desc *desc)
activity_charge (activity, 1);
object_activity_lru_unlink (desc);
object_activity_lru_link (&activity->active, desc);
-
- activity_consistency_check (desc->activity);
}
#define object_desc_claim(a, o) \
({ \