From 0f42e8231f3af3d518a5c438ec41a3d849d37a29 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Sun, 25 Dec 2011 16:23:40 +0100 Subject: menu/control: fix segfaults if manually deletes a control --- src/menu/control.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/menu/control.cpp b/src/menu/control.cpp index b22df1ab..bea054ee 100644 --- a/src/menu/control.cpp +++ b/src/menu/control.cpp @@ -31,7 +31,9 @@ namespace usdx Control::Control(Control *owner) : owner(owner) { - owner->add(this); + if (owner) { + owner->add(this); + } } Control::~Control() @@ -42,14 +44,23 @@ namespace usdx } slaves.clear(); + + // remove object from owners list, to avoid double free + set_owner(NULL); } void Control::set_owner(Control *owner) { if (this->owner != owner) { - this->owner->remove(this); + if (this->owner) { + this->owner->remove(this); + } + this->owner = owner; - this->owner->add(this); + + if (this->owner) { + this->owner->add(this); + } } } -- cgit v1.2.3