From 388734243946540ad05703ad1eee59edd094b299 Mon Sep 17 00:00:00 2001 From: Jonas Kulla Date: Sat, 16 Aug 2014 04:07:39 +0200 Subject: [PATCH] Disposable: Emit 'wasDisposed' on destruction, not dispose() Fixes segfaults when objects that were not explicitly disposed were collected by the GC. --- binding-mri/disposable-binding.h | 3 --- binding-mruby/disposable-binding.h | 3 --- src/disposable.h | 5 +++++ 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/binding-mri/disposable-binding.h b/binding-mri/disposable-binding.h index 6b873d5..0df8b48 100644 --- a/binding-mri/disposable-binding.h +++ b/binding-mri/disposable-binding.h @@ -70,9 +70,6 @@ RB_METHOD(disposableDispose) if (!c) return Qnil; - /* Inform core */ - c->wasDisposed(); - disposableDisposeChildren(self); delete c; diff --git a/binding-mruby/disposable-binding.h b/binding-mruby/disposable-binding.h index 646ffce..eda37de 100644 --- a/binding-mruby/disposable-binding.h +++ b/binding-mruby/disposable-binding.h @@ -72,9 +72,6 @@ MRB_METHOD(disposableDispose) if (!c) return mrb_nil_value(); - /* Inform core */ - c->wasDisposed(); - disposableDisposeChildren(mrb, self); delete c; diff --git a/src/disposable.h b/src/disposable.h index e580ce1..a83f36f 100644 --- a/src/disposable.h +++ b/src/disposable.h @@ -30,6 +30,11 @@ class Disposable { public: + ~Disposable() + { + wasDisposed(); + } + sigc::signal wasDisposed; };