diff --git a/src/libexpr/gc.cc b/src/libexpr/gc.cc index 8320c64ee..902a4c712 100644 --- a/src/libexpr/gc.cc +++ b/src/libexpr/gc.cc @@ -295,8 +295,10 @@ std::pair GC::Arena::freeUnmarked() obj->unmark(); } else { //debug("FREE OBJECT %x %d %d", obj, obj->type, objSize); + #if GC_DEBUG for (Size i = 0; i < objSize; ++i) ((Word *) obj)[i] = 0xdeadc0dedeadbeefULL; + #endif objectsFreed += 1; wordsFreed += objSize; if (curFree) { @@ -333,14 +335,6 @@ bool GC::isObject(void * p) return false; } -void GC::assertObject(void * p) -{ - if (!isObject(p)) { - printError("object %p is not an object", p); - abort(); - } -} - GC::ArenaList::ArenaList() { static Size initialHeapSize = std::stol(getEnv("GC_INITIAL_HEAP_SIZE", "1000000")) / WORD_SIZE; diff --git a/src/libexpr/gc.hh b/src/libexpr/gc.hh index a0ca3f307..dfd8c1b08 100644 --- a/src/libexpr/gc.hh +++ b/src/libexpr/gc.hh @@ -277,7 +277,15 @@ public: bool isObject(void * p); - void assertObject(void * p); + void assertObject(void * p) + { + #if GC_DEBUG + if (!isObject(p)) { + printError("object %p is not an object", p); + abort(); + } + #endif + } }; extern GC gc;