summaryrefslogtreecommitdiff
path: root/viengoos/object.c
diff options
context:
space:
mode:
authorneal <neal>2008-02-15 15:28:10 +0000
committerneal <neal>2008-02-15 15:28:10 +0000
commit5b0707e407239d9223a8478ae6590ee301bf88f2 (patch)
treea33331e71e12fc40f10d15e881353fb414a9647a /viengoos/object.c
parent7d27d13b06e8ce78e7afb027f3fed6a315dfaf75 (diff)
2008-02-15 Neal H. Walfield <neal@gnu.org>
* object.h (struct object_desc): Change live from bit field to a bool. * object.c: Include <assert.h>. (memory_object_destroy): Add asserts. Fix canary being careful not to overwrite DESC->LIVE. (object_find_soft): Add assert. (folio_object_alloc): Likewise.
Diffstat (limited to 'viengoos/object.c')
-rw-r--r--viengoos/object.c46
1 files changed, 38 insertions, 8 deletions
diff --git a/viengoos/object.c b/viengoos/object.c
index 2064009..1606944 100644
--- a/viengoos/object.c
+++ b/viengoos/object.c
@@ -25,6 +25,7 @@
#include <hurd/folio.h>
#include <hurd/thread.h>
#include <bit-array.h>
+#include <assert.h>
#include "object.h"
#include "activity.h"
@@ -165,10 +166,18 @@ memory_object_destroy (struct activity *activity, struct object *object)
assert (desc->live);
+ assertx (folio_object_type (objects_folio (activity, object),
+ objects_folio_offset (object)) == desc->type,
+ "(" OID_FMT ") %s != %s",
+ OID_PRINTF (desc->oid),
+ cap_type_string
+ (folio_object_type (objects_folio (activity, object),
+ objects_folio_offset (object))),
+ cap_type_string (desc->type));
+
debug (5, "Destroy %s at 0x%llx (object %d)",
cap_type_string (desc->type), desc->oid,
- ((uintptr_t) desc - (uintptr_t) object_descs)
- / sizeof (*desc));
+ ((uintptr_t) desc - (uintptr_t) object_descs) / sizeof (*desc));
if (desc->dirty && desc->policy.discardable)
/* Note that the page was discarded. */
@@ -192,14 +201,17 @@ memory_object_destroy (struct activity *activity, struct object *object)
panic ("Attempt to page-out activity with allocated frames");
}
+ desc->live = 0;
+
hurd_ihash_locp_remove (&objects, desc->locp);
assert (! hurd_ihash_find (&objects, desc->oid));
-#ifdef NDEBUG
- memset (desc, 0xde, sizeof (struct object_desc));
+#ifndef NDEBUG
+ memset (desc, 0xde, offsetof (struct object_desc, live));
+ memset ((void *) desc + offsetof (struct object_desc, live) + 4, 0xde,
+ sizeof (struct object_desc)
+ - offsetof (struct object_desc, live) - 4);
#endif
-
- desc->live = 0;
}
struct object *
@@ -213,6 +225,17 @@ object_find_soft (struct activity *activity, oid_t oid,
struct object *object = object_desc_to_object (odesc);
assert (oid == odesc->oid);
+ if (oid % (FOLIO_OBJECTS + 1) != 0)
+ assertx (folio_object_type (objects_folio (activity, object),
+ objects_folio_offset (object)) == odesc->type,
+ "(" OID_FMT ") %s != %s",
+ OID_PRINTF (oid),
+ cap_type_string
+ (folio_object_type (objects_folio (activity, object),
+ objects_folio_offset (object))),
+ cap_type_string (odesc->type));
+
+
if (! activity)
{
assert (! root_activity);
@@ -500,6 +523,9 @@ folio_object_alloc (struct activity *activity,
{
object = object_find (activity, oid, OBJECT_POLICY_DEFAULT);
+ assert (object_to_object_desc (object)->type
+ == folio_object_type (folio, idx));
+
/* See if we need to destroy the object. */
switch (folio_object_type (folio, idx))
{
@@ -539,7 +565,11 @@ folio_object_alloc (struct activity *activity,
{
odesc = object_to_object_desc (object);
assert (odesc->oid == oid);
- assert (odesc->type == folio_object_type (folio, idx));
+ assert (odesc->version == folio_object_version (folio, idx));
+ assertx (odesc->type == folio_object_type (folio, idx),
+ OID_FMT ": %s != %s",
+ OID_PRINTF (odesc->oid), cap_type_string (odesc->type),
+ cap_type_string (folio_object_type (folio, idx)));
if (type == cap_void)
/* We are deallocating the object: free associated memory. */
@@ -661,7 +691,7 @@ object_desc_claim (struct activity *activity, struct object_desc *desc,
/* We need to disconnect DESC from its old activity. If DESC does
- not have an activity, it being initialized. */
+ not have an activity, it is being initialized. */
if (desc->activity)
{
assert (object_type ((struct object *) desc->activity)