From 71725a26b8220c652cff64a1459d7ac75e044498 Mon Sep 17 00:00:00 2001 From: sletz Date: Wed, 29 Nov 2006 11:32:20 +0000 Subject: [PATCH] Correct JackWinEnvent::Allocate (handle the ERROR_ALREADY_EXISTS case). Correct JackEngine::ClientExternalNew. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1312 0c269be4-1314-0410-8aa9-9f06e86f4224 --- ChangeLog | 5 +++++ common/JackEngine.cpp | 19 +++++++++++-------- windows/JackWinEvent.cpp | 8 ++++++-- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 536a66f7..e659ca7b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,11 @@ Jackdmp changes log --------------------------- + +2006-11-29 Stephane Letz + + * Correct JackWinEnvent::Allocate (handle the ERROR_ALREADY_EXISTS case). Correct JackEngine::ClientExternalNew. + 2006-11-22 Stephane Letz * In synchronous mode, if the driver time out is reached, the server may get desynchronized (pending signal may arrive in later cycles), diff --git a/common/JackEngine.cpp b/common/JackEngine.cpp index b5a3c834..0ec11250 100644 --- a/common/JackEngine.cpp +++ b/common/JackEngine.cpp @@ -354,24 +354,24 @@ int JackEngine::ClientExternalNew(const char* name, int* ref, int* shared_engine } if (!fSynchroTable[refnum]->Allocate(name, 0)) { - jack_error("Cannot allocate synchro"); - goto error; + jack_error("Cannot allocate synchro"); + goto error1; } if (client->Open(name, refnum, shared_client) < 0) { jack_error("Cannot open client"); - goto error; + goto error1; } if (!fSignal->TimedWait(5 * 1000000)) { // Failure if RT thread is not running (problem with the driver...) jack_error("Driver is not running"); - goto error; + goto error2; } if (NotifyAddClient(client, name, refnum) < 0) { jack_error("Cannot notify add client"); - goto error; + goto error2; } fClientTable[refnum] = client; @@ -379,10 +379,13 @@ int JackEngine::ClientExternalNew(const char* name, int* ref, int* shared_engine *shared_engine = fEngineControl->GetShmIndex(); *shared_graph_manager = fGraphManager->GetShmIndex(); *ref = refnum; - return 0; + return 0; + +error1: + fGraphManager->ReleaseRefNum(refnum); + return -1; -error: - fGraphManager->ReleaseRefNum(refnum); +error2: ClientCloseAux(refnum, client, false); client->Close(); return -1; diff --git a/windows/JackWinEvent.cpp b/windows/JackWinEvent.cpp index 1040f4bb..92a84209 100644 --- a/windows/JackWinEvent.cpp +++ b/windows/JackWinEvent.cpp @@ -134,8 +134,12 @@ bool JackWinEvent::Allocate(const char* name, int value) if ((fEvent = CreateEvent(NULL, FALSE, FALSE, fName)) == NULL) { jack_error("Allocate: can't check in named event name = %s err = %ld", fName, GetLastError()); return false; - } else { - return true; + } else if (GetLastError() == ERROR_ALREADY_EXISTS) { + jack_error("Allocate: named event already exist name = %s", fName); + CloseHandle(fEvent); + return false; + } else { + return true; } } -- 2.11.4.GIT