From fb08bdf89d5418426f39d320b64a35300bfbc3d4 Mon Sep 17 00:00:00 2001 From: sletz Date: Fri, 27 Jul 2007 14:48:09 +0000 Subject: [PATCH] Correct JackEngine::ClientCloseAux (when called from JackEngine::ClientExternalOpen). Correct JackWinEvent::Allocate. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1502 0c269be4-1314-0410-8aa9-9f06e86f4224 --- ChangeLog | 4 ++++ common/JackEngine.cpp | 17 ++++++++++------- windows/JackWinEvent.cpp | 1 + 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 335a4d21..da76663a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,10 @@ --------------------------- Jackdmp changes log --------------------------- + +2007-07-27 Stephane Letz + + * Correct JackEngine::ClientCloseAux (when called from JackEngine::ClientExternalOpen). Correct JackWinEvent::Allocate. 2007-07-20 Stephane Letz diff --git a/common/JackEngine.cpp b/common/JackEngine.cpp index bc18dcfc..ae35e1d6 100644 --- a/common/JackEngine.cpp +++ b/common/JackEngine.cpp @@ -483,27 +483,30 @@ int JackEngine::ClientInternalCloseIm(int refnum) int JackEngine::ClientCloseAux(int refnum, JackClientInterface* client, bool wait) { - JackLog("JackEngine::ClientCloseAux ref = %ld name = %s\n", refnum, client->GetClientControl()->fName); + JackLog("JackEngine::ClientCloseAux ref = %ld name = %s\n", + refnum, + (client->GetClientControl()) ? client->GetClientControl()->fName : "No name"); // Remove the client from the table - fClientTable[refnum] = NULL; + fClientTable[refnum] = NULL; // Remove ports - fGraphManager->RemoveAllPorts(refnum); + fGraphManager->RemoveAllPorts(refnum); // Wait until next cycle to be sure client is not used anymore if (wait) { if (!fSignal->TimedWait(fEngineControl->fTimeOutUsecs * 2)) { // Must wait at least until a switch occurs in Process, even in case of graph end failure jack_error("JackEngine::ClientCloseAux wait error ref = %ld", refnum); } - } + } - // Notify running clients - NotifyRemoveClient(client->GetClientControl()->fName, client->GetClientControl()->fRefNum); + // Notify running clients + if (client->GetClientControl()) // When called in erro cases, client may not be completrly allocated + NotifyRemoveClient(client->GetClientControl()->fName, client->GetClientControl()->fRefNum); // Cleanup... fSynchroTable[refnum]->Destroy(); - fEngineTiming->ResetRollingUsecs(); + fEngineTiming->ResetRollingUsecs(); return 0; } diff --git a/windows/JackWinEvent.cpp b/windows/JackWinEvent.cpp index 92a84209..a827ad7b 100644 --- a/windows/JackWinEvent.cpp +++ b/windows/JackWinEvent.cpp @@ -137,6 +137,7 @@ bool JackWinEvent::Allocate(const char* name, int value) } else if (GetLastError() == ERROR_ALREADY_EXISTS) { jack_error("Allocate: named event already exist name = %s", fName); CloseHandle(fEvent); + fEvent = NULL; return false; } else { return true;