diff options
author | David Robillard <d@drobilla.net> | 2008-05-23 04:30:24 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-05-23 04:30:24 +0000 |
commit | 0dbcca14bcbcb3aa7e7c0ae24934463a5973a651 (patch) | |
tree | d85dd8d74e4d5ea5c8b4400255c03adb79cda2c5 /src/libs/engine/JackAudioDriver.cpp | |
parent | 9cec63d68fef0e9fd5d3ee5b99a080dbd9180a88 (diff) | |
download | ingen-0dbcca14bcbcb3aa7e7c0ae24934463a5973a651.tar.gz ingen-0dbcca14bcbcb3aa7e7c0ae24934463a5973a651.tar.bz2 ingen-0dbcca14bcbcb3aa7e7c0ae24934463a5973a651.zip |
Fix crash when trying to add multiple objects with the same path.
Handle failed jack port registrations more gracefully.
Don't assume all LADSPA plugins have minimum and maximum port range values.
git-svn-id: http://svn.drobilla.net/lad/ingen@1230 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/engine/JackAudioDriver.cpp')
-rw-r--r-- | src/libs/engine/JackAudioDriver.cpp | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/src/libs/engine/JackAudioDriver.cpp b/src/libs/engine/JackAudioDriver.cpp index 9d5a06b9..cd86f91f 100644 --- a/src/libs/engine/JackAudioDriver.cpp +++ b/src/libs/engine/JackAudioDriver.cpp @@ -48,11 +48,11 @@ namespace Ingen { //// JackAudioPort //// JackAudioPort::JackAudioPort(JackAudioDriver* driver, DuplexPort* patch_port) -: DriverPort(patch_port), - Raul::List<JackAudioPort*>::Node(this), - _driver(driver), - _jack_port(NULL), - _jack_buffer(NULL) + : DriverPort(patch_port) + , Raul::List<JackAudioPort*>::Node(this) + , _driver(driver) + , _jack_port(NULL) + , _jack_buffer(NULL) { assert(patch_port->poly() == 1); @@ -61,6 +61,11 @@ JackAudioPort::JackAudioPort(JackAudioDriver* driver, DuplexPort* patch_port) (patch_port->is_input()) ? JackPortIsInput : JackPortIsOutput, 0); + if (_jack_port == NULL) { + cerr << "[JackAudioPort] ERROR: Failed to register port " << patch_port->path() << endl; + throw JackAudioDriver::PortRegistrationFailedException(); + } + patch_port->buffer(0)->clear(); patch_port->fixed_buffers(true); } @@ -95,15 +100,15 @@ JackAudioPort::prepare_buffer(jack_nframes_t nframes) JackAudioDriver::JackAudioDriver(Engine& engine, std::string server_name, jack_client_t* jack_client) -: _engine(engine), - _jack_thread(NULL), - _client(jack_client), - _buffer_size(jack_client ? jack_get_buffer_size(jack_client) : 0), - _sample_rate(jack_client ? jack_get_sample_rate(jack_client) : 0), - _is_activated(false), - _local_client(true), // FIXME - _process_context(engine), - _root_patch(NULL) + : _engine(engine) + , _jack_thread(NULL) + , _client(jack_client) + , _buffer_size(jack_client ? jack_get_buffer_size(jack_client) : 0) + , _sample_rate(jack_client ? jack_get_sample_rate(jack_client) : 0) + , _is_activated(false) + , _local_client(true) // FIXME + , _process_context(engine) + , _root_patch(NULL) { if (!_client) { // Try supplied server name @@ -247,10 +252,14 @@ JackAudioDriver::port(const Path& path) DriverPort* JackAudioDriver::create_port(DuplexPort* patch_port) { - if (patch_port->buffer_size() == _buffer_size) - return new JackAudioPort(this, patch_port); - else + try { + if (patch_port->buffer_size() == _buffer_size) + return new JackAudioPort(this, patch_port); + else + return NULL; + } catch (...) { return NULL; + } } |