From ed19165ed57cf9f5427c9e0f4a53be9ec680191b Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Sat, 10 Dec 2016 02:19:32 +0300 Subject: [PATCH] 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. --- include/gc_cpp.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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) -- 2.50.1