From 8c87102688c06409850b6c7543a17932117a7a94 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 21 Jun 2012 15:00:10 +0000 Subject: a putatively better approach to cleaning up ports at session closing git-svn-id: svn://localhost/ardour2/branches/3.0@12807 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/port.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'libs/ardour/port.cc') diff --git a/libs/ardour/port.cc b/libs/ardour/port.cc index b0c4b43c06..3473b73617 100644 --- a/libs/ardour/port.cc +++ b/libs/ardour/port.cc @@ -38,6 +38,7 @@ using namespace ARDOUR; using namespace PBD; PBD::Signal2, boost::shared_ptr > Port::PostDisconnect; +PBD::Signal0 Port::PortDrop; AudioEngine* Port::_engine = 0; bool Port::_connecting_blocked = false; @@ -71,13 +72,24 @@ Port::Port (std::string const & n, DataType t, Flags f) cerr << "Failed to register JACK port \"" << _name << "\", reason is unknown from here\n"; throw failed_constructor (); } + + PortDrop.connect_same_thread (drop_connection, boost::bind (&Port::drop, this)); } /** Port destructor */ Port::~Port () { - if (_engine->jack ()) { - jack_port_unregister (_engine->jack (), _jack_port); + drop (); +} + +void +Port::drop () +{ + if (_jack_port) { + if (_engine->jack ()) { + jack_port_unregister (_engine->jack (), _jack_port); + } + _jack_port = 0; } } -- cgit v1.2.3