summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-09-28 03:36:59 +0000
committerDavid Robillard <d@drobilla.net>2008-09-28 03:36:59 +0000
commit9c665df722565ec8c994fba371dea69d5f934db4 (patch)
tree94bf5d88a67cad3dc3ad5ae789c0b62dd4aec0d3
parent7471821294765f6da694d14ff81581b31d1a983a (diff)
downloadingen-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
-rw-r--r--src/libs/gui/App.cpp11
-rw-r--r--src/libs/gui/App.hpp2
-rw-r--r--src/libs/gui/Port.cpp6
-rw-r--r--src/libs/gui/Port.hpp3
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; }