From a48fea3c01f703bef626f5b3ce46abcc7bf4e2e3 Mon Sep 17 00:00:00 2001 From: Stephane Letz Date: Thu, 3 Jul 2014 16:48:09 +0200 Subject: [PATCH] Correct JackWinMMEDriver and JackALSARawMidiDriver creation. --- linux/alsarawmidi/JackALSARawMidiDriver.cpp | 22 ++++++++++++++------- windows/winmme/JackWinMMEDriver.cpp | 4 ++-- 2 files changed, 17 insertions(+), 9 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 diff --git a/windows/winmme/JackWinMMEDriver.cpp b/windows/winmme/JackWinMMEDriver.cpp index 16499eaa..91fea6fb 100644 --- a/windows/winmme/JackWinMMEDriver.cpp +++ b/windows/winmme/JackWinMMEDriver.cpp @@ -359,7 +359,7 @@ extern "C" #endif // singleton kind of driver - static Jack::JackDriverClientInterface* driver = NULL; + static Jack::JackWinMMEDriver* driver = NULL; SERVER_EXPORT jack_driver_desc_t * driver_get_descriptor() { @@ -411,7 +411,7 @@ extern "C" // singleton kind of driver if (!driver) { driver = new Jack::JackWinMMEDriver("system_midi", "winmme", engine, table); - if (driver->Open(0, 0, 1, 1, 0, 0, false, "in", "out", 0, 0) == 0) { + if (driver->Open(1, 1, 0, 0, false, "in", "out", 0, 0) == 0) { return driver; } else { delete driver;