summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
authorStephane Letz <letz@grame.fr>2014-07-03 16:48:09 +0200
committerStephane Letz <letz@grame.fr>2014-07-03 16:48:09 +0200
commita48fea3c01f703bef626f5b3ce46abcc7bf4e2e3 (patch)
tree30078fa70d0d6f80eef95a024e07e202acc92915 /linux
parente24717e3ed4e706f19cc8ad699c2928cc942b14f (diff)
downloadjack2-a48fea3c01f703bef626f5b3ce46abcc7bf4e2e3.tar.gz
Correct JackWinMMEDriver and JackALSARawMidiDriver creation.
Diffstat (limited to 'linux')
-rw-r--r--linux/alsarawmidi/JackALSARawMidiDriver.cpp22
1 files changed, 15 insertions, 7 deletions
diff --git a/linux/alsarawmidi/JackALSARawMidiDriver.cpp b/linux/alsarawmidi/JackALSARawMidiDriver.cpp
index aaa56cf5..5e4e61df 100644
--- a/linux/alsarawmidi/JackALSARawMidiDriver.cpp
+++ b/linux/alsarawmidi/JackALSARawMidiDriver.cpp
@@ -624,6 +624,9 @@ JackALSARawMidiDriver::Write()
#ifdef __cplusplus
extern "C" {
#endif
+
+ // singleton kind of driver
+ static Jack::JackALSARawMidiDriver* driver = NULL;
SERVER_EXPORT jack_driver_desc_t *
driver_get_descriptor()
@@ -639,14 +642,19 @@ extern "C" {
driver_initialize(Jack::JackLockedEngine *engine, Jack::JackSynchro *table,
const JSList *params)
{
- Jack::JackDriverClientInterface *driver =
- new Jack::JackALSARawMidiDriver("system_midi", "alsarawmidi",
- engine, table);
- if (driver->Open(0, 0, 1, 1, 0, 0, false, "midi in", "midi out", 0, 0)) {
- delete driver;
- driver = 0;
+ // singleton kind of driver
+ if (!driver) {
+ driver = new Jack::JackALSARawMidiDriver("system_midi", "alsarawmidi", engine, table);
+ if (driver->Open(1, 1, 0, 0, false, "midi in", "midi out", 0, 0) == 0) {
+ return driver;
+ } else {
+ delete driver;
+ return NULL;
+ }
+ } else {
+ jack_info("JackALSARawMidiDriver already allocated, cannot be loaded twice");
+ return NULL;
}
- return driver;
}
#ifdef __cplusplus