13
0

Ports say when they're going away.

git-svn-id: svn://localhost/ardour2/branches/3.0@4380 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2009-01-02 19:38:43 +00:00
parent d5427db306
commit 9935b950ee
2 changed files with 17 additions and 1 deletions

View File

@ -26,6 +26,7 @@
#include <cstring>
#include <sigc++/signal.h>
#include <pbd/failed_constructor.h>
#include <pbd/destructible.h>
#include <ardour/ardour.h>
#include <ardour/data_type.h>
#include <jack/jack.h>
@ -37,7 +38,7 @@ class Buffer;
/** Abstract base for ports
*/
class Port : public virtual sigc::trackable {
class Port : public virtual PBD::Destructible {
public:
enum Flags {
IsInput = JackPortIsInput,
@ -132,6 +133,10 @@ class Port : public virtual sigc::trackable {
std::set<Port*> _connections;
static AudioEngine* engine;
private:
void port_going_away (Port *);
};
class PortConnectableByName {

View File

@ -34,6 +34,7 @@ Port::Port (const std::string& name, Flags flgs)
Port::~Port ()
{
drop_references ();
disconnect_all ();
}
@ -59,6 +60,7 @@ Port::connect (Port& other)
result = _connections.insert (&other);
if (result.second) {
other.GoingAway.connect (sigc::bind (mem_fun (*this, &Port::port_going_away), &other));
return 0;
} else {
return 1;
@ -131,6 +133,14 @@ Port::get_connections (vector<string>& names) const
return i;
}
void
Port::port_going_away (Port* p)
{
/* caller must hold process lock */
disconnect (*p);
}
//-------------------------------------
@ -377,3 +387,4 @@ PortFacade::reset ()
_ext_port->reset ();
}
}