diff options
author | David Robillard <d@drobilla.net> | 2008-09-28 03:36:59 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-09-28 03:36:59 +0000 |
commit | 9c665df722565ec8c994fba371dea69d5f934db4 (patch) | |
tree | 94bf5d88a67cad3dc3ad5ae789c0b62dd4aec0d3 /src/libs | |
parent | 7471821294765f6da694d14ff81581b31d1a983a (diff) | |
download | ingen-9c665df722565ec8c994fba371dea69d5f934db4.tar.gz ingen-9c665df722565ec8c994fba371dea69d5f934db4.tar.bz2 ingen-9c665df722565ec8c994fba371dea69d5f934db4.zip |
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
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/gui/App.cpp | 11 | ||||
-rw-r--r-- | src/libs/gui/App.hpp | 2 | ||||
-rw-r--r-- | src/libs/gui/Port.cpp | 6 | ||||
-rw-r--r-- | src/libs/gui/Port.hpp | 3 |
4 files changed, 19 insertions, 3 deletions
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; - /// <Port, whether it has been seen in gtk callback yet> typedef std::map<Port*, bool> 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<FlowCanvas::Module> module, SharedPtr<PortModel> 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<FlowCanvas::Module> module, SharedPtr<PortModel> pm, bool flip=false); - - virtual ~Port() {} + ~Port(); SharedPtr<PortModel> model() const { return _port_model; } |