From 99ab1c257b7456c16f82119e1faea62c61eea660 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 7 Jan 2007 06:11:57 +0000 Subject: Top level port destruction (Jack port removal). git-svn-id: http://svn.drobilla.net/lad/ingen@238 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/engine/JackAudioDriver.cpp | 39 ++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 18 deletions(-) (limited to 'src/libs/engine/JackAudioDriver.cpp') diff --git a/src/libs/engine/JackAudioDriver.cpp b/src/libs/engine/JackAudioDriver.cpp index 58834139..87728e93 100644 --- a/src/libs/engine/JackAudioDriver.cpp +++ b/src/libs/engine/JackAudioDriver.cpp @@ -72,19 +72,6 @@ JackAudioPort::~JackAudioPort() } -void -JackAudioPort::add_to_driver() -{ - _driver->add_port(this); -} - - -void -JackAudioPort::remove_from_driver() -{ - _driver->remove_port(this); -} - void JackAudioPort::prepare_buffer(jack_nframes_t nframes) { @@ -227,9 +214,12 @@ JackAudioDriver::deactivate() * See create_port() and remove_port(). */ void -JackAudioDriver::add_port(JackAudioPort* port) +JackAudioDriver::add_port(DriverPort* port) { - _ports.push_back(port); + assert(ThreadManager::current_thread_id() == THREAD_PROCESS); + + assert(dynamic_cast(port)); + _ports.push_back((JackAudioPort*)port); } @@ -241,11 +231,13 @@ JackAudioDriver::add_port(JackAudioPort* port) * * It is the callers responsibility to delete the returned port. */ -JackAudioPort* -JackAudioDriver::remove_port(JackAudioPort* port) +DriverPort* +JackAudioDriver::remove_port(const Path& path) { + assert(ThreadManager::current_thread_id() == THREAD_PROCESS); + for (List::iterator i = _ports.begin(); i != _ports.end(); ++i) - if ((*i) == port) + if ((*i)->patch_port()->path() == path) return _ports.remove(i)->elem(); cerr << "[JackAudioDriver::remove_port] WARNING: Failed to find Jack port to remove!" << endl; @@ -253,6 +245,17 @@ JackAudioDriver::remove_port(JackAudioPort* port) } +DriverPort* +JackAudioDriver::port(const Path& path) +{ + for (List::iterator i = _ports.begin(); i != _ports.end(); ++i) + if ((*i)->patch_port()->path() == path) + return (*i); + + return NULL; +} + + DriverPort* JackAudioDriver::create_port(DuplexPort* patch_port) { -- cgit v1.2.1