From: Ivan Maidanski Date: Fri, 9 Dec 2016 23:19:32 +0000 (+0300) Subject: Fix gc_cleanup destructor for non-heap objects (gc_cpp) X-Git-Tag: v8.0.0~995 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bb4c81b9808fe7515cdb9596a58bdee5480e2e68;p=gc Fix gc_cleanup destructor for non-heap objects (gc_cpp) * include/gc_cpp.h (gc_cleanup::~gc_cleanup): If GC_base(this) returns null (could be if the object is not allocated dynamically) then do not call GC_register_finalizer_ignore_self. --- diff --git a/include/gc_cpp.h b/include/gc_cpp.h index ea0e9705..1ed36be5 100644 --- a/include/gc_cpp.h +++ b/include/gc_cpp.h @@ -416,7 +416,9 @@ inline void gc::operator delete(void* obj) inline gc_cleanup::~gc_cleanup() { - GC_register_finalizer_ignore_self(GC_base(this), 0, 0, 0, 0); + void* base = GC_base(this); + if (0 == base) return; // Non-heap object. + GC_register_finalizer_ignore_self(base, 0, 0, 0, 0); } inline void GC_CALLBACK gc_cleanup::cleanup(void* obj, void* displ)