From 9c665df722565ec8c994fba371dea69d5f934db4 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 28 Sep 2008 03:36:59 +0000 Subject: Fix potential crash when port blinkenports activity is followed by port destruction (before the blink is turned off). Fix ticket #192. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@1520 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/gui/App.cpp | 11 +++++++++++ src/libs/gui/App.hpp | 2 +- src/libs/gui/Port.cpp | 6 ++++++ src/libs/gui/Port.hpp | 3 +-- 4 files changed, 19 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/libs/gui/App.cpp b/src/libs/gui/App.cpp index 54547114..9cf69596 100644 --- a/src/libs/gui/App.cpp +++ b/src/libs/gui/App.cpp @@ -234,6 +234,17 @@ App::port_activity(Port* port) } +void +App::activity_port_destroyed(Port* port) +{ + ActivityPorts::iterator i = _activity_ports.find(port); + if (i != _activity_ports.end()) + _activity_ports.erase(i); + + return; +} + + bool App::animate() { diff --git a/src/libs/gui/App.hpp b/src/libs/gui/App.hpp index a693b729..08ceb271 100644 --- a/src/libs/gui/App.hpp +++ b/src/libs/gui/App.hpp @@ -98,6 +98,7 @@ public: void quit(); void port_activity(Port* port); + void activity_port_destroyed(Port* port); bool signal() const { return _enable_signal; } bool disable_signals() { bool old = _enable_signal; _enable_signal = false; return old; } @@ -163,7 +164,6 @@ protected: Ingen::Shared::World* _world; - /// typedef std::map ActivityPorts; ActivityPorts _activity_ports; diff --git a/src/libs/gui/Port.cpp b/src/libs/gui/Port.cpp index f675497b..0452edc6 100644 --- a/src/libs/gui/Port.cpp +++ b/src/libs/gui/Port.cpp @@ -73,6 +73,12 @@ Port::Port(boost::shared_ptr module, SharedPtr pm } +Port::~Port() +{ + App::instance().activity_port_destroyed(this); +} + + void Port::create_menu() { diff --git a/src/libs/gui/Port.hpp b/src/libs/gui/Port.hpp index ae9b0c48..4851a63f 100644 --- a/src/libs/gui/Port.hpp +++ b/src/libs/gui/Port.hpp @@ -39,8 +39,7 @@ class Port : public FlowCanvas::Port { public: Port(boost::shared_ptr module, SharedPtr pm, bool flip=false); - - virtual ~Port() {} + ~Port(); SharedPtr model() const { return _port_model; } -- cgit v1.2.1