added REQUIRE checks
authorChristian Thaeter <ct@pipapo.org>
Wed, 20 Dec 2006 16:33:01 +0000 (17:33 +0100)
committerChristian Thaeter <ct@pipapo.org>
Wed, 20 Dec 2006 16:33:01 +0000 (17:33 +0100)
lib/acogc.c
lib/acogc.h

index b65177e..8e60ef5 100644 (file)
@@ -45,6 +45,7 @@ void acogc_nobug_init()
 void
 acogc_root_init (AcogcRoot self)
 {
+  REQUIRE (self);
   INFO (acogc, "self %p", self);
   llist_init (&self->factories);
   self->collection_freq_avg = 0;
@@ -60,6 +61,7 @@ acogc_root_init (AcogcRoot self)
 void
 acogc_root_erase (AcogcRoot self)
 {
+  REQUIRE (self);
   LLIST_FOREACH (&self->factories, fnode)
     {
       AcogcFactory f = LLIST_TO_STRUCTP (fnode, acogc_factory, factories);
@@ -107,6 +109,7 @@ acogc_root_erase (AcogcRoot self)
 void
 acogc_root_collect (AcogcRoot self, acogc_freeing_policy pol)
 {
+  REQUIRE (self);
   /* we can short-circruit the collection we just did one and no user-code has been run */
   if (self->allocation_counter != 0 || pol >= ACOGC_COLLECT_FORCEALL || pol == ACOGC_COLLECT_DONTFREE)
     {
@@ -248,6 +251,14 @@ acogc_factory_init (AcogcFactory self,
                     acogc_initize_func initize,
                     acogc_finalize_func finalize)
 {
+  REQUIRE (self);
+  REQUIRE (root);
+
+  REQUIRE (size > 0);
+  REQUIRE (low_water < 100);
+  REQUIRE (high_water < 100);
+  REQUIRE (low_water <= high_water);
+
   NOTICE_DBG (acogc, "%p", self);
 
   llist_init (&self->factories);
@@ -274,6 +285,7 @@ acogc_factory_init (AcogcFactory self,
 void *
 acogc_factory_alloc (AcogcFactory self)
 {
+  REQUIRE (self);
   AcogcObject object;
 
   INFO_DBG (acogc_alloc, "%p", self);
@@ -337,6 +349,8 @@ acogc_mark_result
 acogc_object_markreally (AcogcObject self)
 {
  tailcall:
+  REQUIRE (self);
+
   TRACE_DBG (acogc_mark, "mark object %p, state %d", acogc_memory_from_object (self), self->state);
 
   REQUIRE (self->state != self->factory->root->state, "marking already marked object %p", acogc_memory_from_object (self));
@@ -369,9 +383,10 @@ acogc_object_markreally (AcogcObject self)
 void
 acogc_addroot (void* object)
 {
+  REQUIRE (object);
   NOTICE_DBG (acogc, "object %p", object);
-  if(!object)
-    return;
+  //if(!object)
+  //  return;
 
   AcogcObject o = acogc_object_from_memory (object);
 
@@ -392,9 +407,11 @@ acogc_addroot (void* object)
 void
 acogc_removeroot (void* object)
 {
+  REQUIRE (object);
+
   NOTICE_DBG (acogc, "object %p", object);
-  if(!object)
-    return;
+  //if(!object)
+  //  return;
 
   AcogcObject o = acogc_object_from_memory (object);
 
@@ -435,6 +452,9 @@ acogc_removeroot (void* object)
 void
 acogc_weakref_link (AcogcWeakref self, void* o)
 {
+  REQUIRE (self);
+  REQUIRE (o);
+
   if (self->ref != o)
     {
       TRACE_DBG (acogc_weak, "weaklink %p to %p", self, o);
@@ -453,6 +473,8 @@ acogc_weakref_link (AcogcWeakref self, void* o)
 void
 acogc_weakref_unlink (AcogcWeakref self)
 {
+  REQUIRE (self);
+
   AcogcWeakref_ref prev = &self->next;
   AcogcWeakref i = self->next;
   if (i)
@@ -477,6 +499,8 @@ acogc_weakref_unlink (AcogcWeakref self)
 void
 acogc_object_weakref_invalidate (void* memory)
 {
+  REQUIRE (memory);
+
   INFO_DBG (acogc_weak, "invalidate %p, weak %p", memory, acogc_object_from_memory(memory)->weakrefs);
   AcogcWeakref_ref object = &acogc_object_from_memory(memory)->weakrefs;
   if (*object)
@@ -496,6 +520,8 @@ acogc_object_weakref_invalidate (void* memory)
 void *
 acogc_weakref_reinstget (AcogcWeakref self)
 {
+  REQUIRE (self);
+
   if (!self->ref)
     {
       TRACE_DBG (acogc_weak, "reinst miss %p", self);
@@ -517,6 +543,8 @@ acogc_weakref_reinstget (AcogcWeakref self)
 void *
 acogc_weakref_get (AcogcWeakref self)
 {
+  REQUIRE (self);
+
   if (!self->ref)
     return NULL;
 
@@ -531,6 +559,7 @@ acogc_weakref_get (AcogcWeakref self)
 void
 acogc_weakref_assert_cleared (AcogcWeakref p)
 {
+  REQUIRE (p);
   (void) p;
   ASSERT (!p->next && ! p->ref, "weak-weakref %p not cleared at end of scope", p);
 }
@@ -539,14 +568,17 @@ acogc_weakref_assert_cleared (AcogcWeakref p)
 void
 acogc_alloc_ (void ** addr, size_t size, AcogcRoot root)
 {
+  REQUIRE (addr);
+  REQUIRE (size > 0);
+  REQUIRE (root);
+
   void * ret;
   acogc_freeing_policy pol = ACOGC_COLLECT_NORMAL;
 
   /* alloc memory */
  retry:
   ret = realloc (*addr, size);
-  if (!root && !ret)
-    abort();
+
   if (!ret)
     {
       acogc_root_collect (root, pol);
@@ -561,6 +593,11 @@ acogc_alloc_ (void ** addr, size_t size, AcogcRoot root)
 size_t
 acogc_reserve_ (void ** addr, size_t actual, size_t needed, AcogcRoot root)
 {
+  REQUIRE (addr);
+  REQUIRE (actual > 0);
+  REQUIRE (needed > 0);
+  REQUIRE (root);
+
   void * ret;
   acogc_freeing_policy pol = ACOGC_COLLECT_NORMAL;
 
@@ -586,6 +623,7 @@ acogc_reserve_ (void ** addr, size_t actual, size_t needed, AcogcRoot root)
 void
 acogc_free_ (void ** addr)
 {
+  REQUIRE (addr);
   free (*addr);
   *addr = NULL;
 }
@@ -596,6 +634,8 @@ acogc_free_ (void ** addr)
 void
 acogc_assert_stackframeleft (AcogcStack_ref p)
 {
+  REQUIRE (p);
+  REQUIRE (*p);
   ASSERT (*p == (AcogcStack) p);
   (void) p;
 }
index cbbee42..b9ca2ce 100644 (file)
@@ -313,6 +313,7 @@ acogc_object_markreally (AcogcObject object);
 static inline AcogcFactory
 acogc_object_type (const void * o)
 {
+  REQUIRE (o);
   return acogc_object_from_memory (o)->factory;
 }
 
@@ -344,10 +345,9 @@ acogc_object_mark (void * o)
 static inline acogc_mark_result
 acogc_object_lastmark (void * o)
 {
-  INFO (acogc_mark, "object %p", o);
-
   if (o)
     {
+      INFO (acogc_mark, "object %p", o);
       AcogcObject object = acogc_object_from_memory (o);
 
       TRACE_DBG (acogc_mark, "state %d", object->state);
@@ -385,6 +385,7 @@ struct acogc_weakref_struct
 static inline void
 acogc_weakref_init (AcogcWeakref self)
 {
+  REQUIRE (self);
   self->next = self->ref = NULL;
 }