From 02f27ba01e63ceed1a96278e3387d253c17d4c9c Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 1 Apr 2023 01:43:09 +0200 Subject: [PATCH] Improve error message when standalone fails to start Signed-off-by: falkTX --- distrho/src/DistrhoPluginJACK.cpp | 16 ++++++++++++---- distrho/src/jackbridge/JackBridge.cpp | 17 +++++++++++++++++ distrho/src/jackbridge/JackBridge.hpp | 3 ++- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/distrho/src/DistrhoPluginJACK.cpp b/distrho/src/DistrhoPluginJACK.cpp index ff1bff18..5a76f4c4 100644 --- a/distrho/src/DistrhoPluginJACK.cpp +++ b/distrho/src/DistrhoPluginJACK.cpp @@ -1033,6 +1033,12 @@ int main(int argc, char* argv[]) jack_status_t status = jack_status_t(0x0); jack_client_t* client = jackbridge_client_open(DISTRHO_PLUGIN_NAME, JackNoStartServer, &status); + #ifdef HAVE_JACK + #define STANDALONE_NAME "JACK client" + #else + #define STANDALONE_NAME "Native audio driver" + #endif + if (client == nullptr) { String errorString; @@ -1063,20 +1069,22 @@ int main(int argc, char* argv[]) errorString += "Backend Error;\n"; if (status & JackClientZombie) errorString += "Client is being shutdown against its will;\n"; + if (status & JackBridgeNativeFailed) + errorString += "Native audio driver was unable to start;\n"; if (errorString.isNotEmpty()) { errorString[errorString.length()-2] = '.'; - d_stderr("Failed to create the JACK client, reason was:\n%s", errorString.buffer()); + d_stderr("Failed to create the " STANDALONE_NAME ", reason was:\n%s", errorString.buffer()); } else - d_stderr("Failed to create the JACK client, cannot continue!"); + d_stderr("Failed to create the " STANDALONE_NAME ", cannot continue!"); #if defined(DISTRHO_OS_MAC) CFStringRef errorTitleRef = CFStringCreateWithCString(nullptr, DISTRHO_PLUGIN_NAME ": Error", kCFStringEncodingUTF8); CFStringRef errorStringRef = CFStringCreateWithCString(nullptr, - String("Failed to create JACK client, reason was:\n" + errorString).buffer(), kCFStringEncodingUTF8); + String("Failed to create " STANDALONE_NAME ", reason was:\n" + errorString).buffer(), kCFStringEncodingUTF8); CFUserNotificationDisplayAlert(0, kCFUserNotificationCautionAlertLevel, nullptr, nullptr, nullptr, @@ -1100,7 +1108,7 @@ int main(int argc, char* argv[]) FreeLibrary(user32); } - const String win32error = "Failed to create JACK client, reason was:\n" + errorString; + const String win32error = "Failed to create " STANDALONE_NAME ", reason was:\n" + errorString; MessageBoxA(nullptr, win32error.buffer(), "", MB_ICONERROR); #endif diff --git a/distrho/src/jackbridge/JackBridge.cpp b/distrho/src/jackbridge/JackBridge.cpp index 1538f67a..b462d5af 100644 --- a/distrho/src/jackbridge/JackBridge.cpp +++ b/distrho/src/jackbridge/JackBridge.cpp @@ -934,8 +934,25 @@ jack_client_t* jackbridge_client_open(const char* client_name, uint32_t options, delete nativeBridge; #endif #endif + if (status != nullptr) + { *status = JackServerError; + + #if !(defined(JACKBRIDGE_DUMMY) || defined(JACKBRIDGE_DIRECT)) + if (nativeBridge != nullptr) + { + *status + #ifdef HAVE_JACK + |= + #else + = + #endif + JackBridgeNativeFailed; + } + #endif + } + return nullptr; } diff --git a/distrho/src/jackbridge/JackBridge.hpp b/distrho/src/jackbridge/JackBridge.hpp index 0788093f..b287b47e 100644 --- a/distrho/src/jackbridge/JackBridge.hpp +++ b/distrho/src/jackbridge/JackBridge.hpp @@ -126,7 +126,8 @@ enum JackStatus { JackShmFailure = 0x0200, JackVersionError = 0x0400, JackBackendError = 0x0800, - JackClientZombie = 0x1000 + JackClientZombie = 0x1000, + JackBridgeNativeFailed = 0x10000 }; enum JackLatencyCallbackMode {