From 992e7cd7b85e225ef1e954dc847b078194ffd983 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) (Cherry-pick commit ed19165 from 'release-7_6' branch.) * 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 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/include/gc_cpp.h b/include/gc_cpp.h index 2e4aa1b4..4f25dddf 100644 --- a/include/gc_cpp.h +++ b/include/gc_cpp.h @@ -361,8 +361,11 @@ inline void gc::operator delete( void* obj ) { # endif #endif /* GC_OPERATOR_NEW_ARRAY */ -inline gc_cleanup::~gc_cleanup() { - GC_register_finalizer_ignore_self( GC_base(this), 0, 0, 0, 0 ); +inline gc_cleanup::~gc_cleanup() +{ + 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.40.0