diff --git a/common/JackClient.cpp b/common/JackClient.cpp index 6dfd74b9..567cf765 100644 --- a/common/JackClient.cpp +++ b/common/JackClient.cpp @@ -75,7 +75,6 @@ JackClient::JackClient(JackSynchro* table):fThread(this) fSyncArg = NULL; fTimebaseArg = NULL; fThreadFunArg = NULL; - fServerRunning = false; } JackClient::~JackClient() @@ -85,15 +84,17 @@ int JackClient::Close() { jack_log("JackClient::Close ref = %ld", GetClientControl()->fRefNum); int result = 0; + Deactivate(); fChannel->Stop(); // Channels is stopped first to avoid receiving notifications while closing // Request close only is server is still running - if (fServerRunning) { + if (GetClientControl()->fServer) { fChannel->ClientClose(GetClientControl()->fRefNum, &result); } else { jack_log("JackClient::Close server is shutdown"); } + fChannel->Close(); fSynchroTable[GetClientControl()->fRefNum].Disconnect(); return result; @@ -581,9 +582,11 @@ ShutDown is called: void JackClient::ShutDown() { jack_log("ShutDown"); - fServerRunning = false; + + GetClientControl()->fServer = false; + GetClientControl()->fActive = false; + if (fShutdown) { - GetClientControl()->fActive = false; fShutdown(fShutdownArg); fShutdown = NULL; } diff --git a/common/JackClientControl.h b/common/JackClientControl.h index 4aa31b0c..f8145c49 100644 --- a/common/JackClientControl.h +++ b/common/JackClientControl.h @@ -43,6 +43,7 @@ struct JackClientControl : public JackShmMemAble int fRefNum; int fPID; bool fActive; + bool fServer; JackClientControl(const char* name, int pid, int refnum) { @@ -77,6 +78,7 @@ struct JackClientControl : public JackShmMemAble fTransportSync = false; fTransportTimebase = false; fActive = false; + fServer = true; } }; diff --git a/common/JackInternalClient.cpp b/common/JackInternalClient.cpp index 144b419b..e51e996d 100644 --- a/common/JackInternalClient.cpp +++ b/common/JackInternalClient.cpp @@ -147,7 +147,6 @@ int JackInternalClient::Open(const char* server_name, const char* name, jack_opt } SetupDriverSync(false); - fServerRunning = true; return 0; error: diff --git a/common/JackLibClient.cpp b/common/JackLibClient.cpp index e09457ab..d75d24e4 100644 --- a/common/JackLibClient.cpp +++ b/common/JackLibClient.cpp @@ -118,7 +118,6 @@ int JackLibClient::Open(const char* server_name, const char* name, jack_options_ } jack_log("JackLibClient::Open name = %s refnum = %ld", name_res, GetClientControl()->fRefNum); - fServerRunning = true; return 0; error: