From 1f2d94ca4a403b422f08ffdc45223af9e76b4444 Mon Sep 17 00:00:00 2001 From: Christian Thaeter Date: Wed, 17 Jan 2007 10:43:10 +0100 Subject: [PATCH] added nobug check for stack corruption --- lib/acogc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/acogc.c b/lib/acogc.c index b371ccf..6d82a70 100644 --- a/lib/acogc.c +++ b/lib/acogc.c @@ -127,9 +127,10 @@ acogc_root_collect (AcogcRoot self, acogc_freeing_policy pol) } ++self->state; - // check for state overflow and reinit GC states (happens *very* rarely) + // check for state overflow and reinit GC states (happens *very* rarely, once every 2^31 collections at worst) if (self->state == ACOGC_STATE_LAST) { + NOTICE (acogc_collect, "gc state overflow, recycle"); self->state = ACOGC_STATE_START; LLIST_FOREACH (&self->factories, fnode) { @@ -145,6 +146,7 @@ acogc_root_collect (AcogcRoot self, acogc_freeing_policy pol) LLIST_FOREACH (&self->factories, fnode) { AcogcFactory f = LLIST_TO_STRUCTP (fnode, acogc_factory, factories); + TRACE (acogc_collect, "marking roots in %s", f->factory_name); f->objects_used = 0; f->objects_new = 0; LLIST_FOREACH (&f->roots, i) @@ -157,8 +159,10 @@ acogc_root_collect (AcogcRoot self, acogc_freeing_policy pol) } // and for all root->stack references + TRACE (acogc_collect, "marking stack references"); for (AcogcStack r = self->stack; r; r = r->prev) { + ASSERT (r != r->prev, "stack corruption, maybe ACOGC_STACK_PTR redefinition in a loop"); TRACE_DBG (acogc_collect, "stack marker %p", r->ptr); acogc_object_mark (r->ptr); } -- 2.11.4.GIT