Browse Source

Fix JackClient::Close : notification channel is stopped first to avoid receiving notifications while closing and Close is again a synchronous call.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2230 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 17 years ago
parent
commit
a65b5e881f
8 changed files with 36 additions and 30 deletions
  1. +4
    -0
      ChangeLog
  2. +1
    -1
      common/JackClient.cpp
  3. +1
    -1
      common/JackEngine.cpp
  4. +1
    -1
      common/JackSocketClientChannel.cpp
  5. +18
    -17
      common/JackSocketServerChannel.cpp
  6. +2
    -1
      macosx/JackMachThread.cpp
  7. +1
    -1
      windows/JackWinNamedPipeClientChannel.cpp
  8. +8
    -8
      windows/JackWinNamedPipeServerChannel.cpp

+ 4
- 0
ChangeLog View File

@@ -20,6 +20,10 @@ Fernando Lopez-Lezcano
Jackdmp changes log
---------------------------

2008-05-05 Stephane Letz <letz@grame.fr>

* Fix JackClient::Close : notification channel is stopped first to avoid receiving notifications while closing and Close is again a synchronous call.

2008-05-01 Stephane Letz <letz@grame.fr>

* Fix JackMachClientChannel::InternalClientLoad.


+ 1
- 1
common/JackClient.cpp View File

@@ -78,8 +78,8 @@ int JackClient::Close()
jack_log("JackClient::Close ref = %ld", GetClientControl()->fRefNum);
Deactivate();
int result = -1;
fChannel->Stop(); // Channels is stopped first to avoid receiving notifications while closing
fChannel->ClientClose(GetClientControl()->fRefNum, &result);
fChannel->Stop();
fChannel->Close();
fSynchroTable[GetClientControl()->fRefNum]->Disconnect();
return result;


+ 1
- 1
common/JackEngine.cpp View File

@@ -215,7 +215,7 @@ void JackEngine::NotifyClient(int refnum, int event, int sync, int value1, int v
jack_log("JackEngine::NotifyClient: client not available anymore");
} else if (client->GetClientControl()->fCallback[event]) {
if (client->ClientNotify(refnum, client->GetClientControl()->fName, event, sync, value1, value2) < 0)
jack_error("NotifyClient fails name = %s event = %ld = val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2);
jack_error("NotifyClient fails name = %s event = %ld val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2);
} else {
jack_log("JackEngine::NotifyClient: no callback for event = %ld", event);
}


+ 1
- 1
common/JackSocketClientChannel.cpp View File

@@ -162,7 +162,7 @@ void JackSocketClientChannel::ClientClose(int refnum, int* result)
{
JackClientCloseRequest req(refnum);
JackResult res;
ServerAsyncCall(&req, &res, result);
ServerSyncCall(&req, &res, result);
}

void JackSocketClientChannel::ClientActivate(int refnum, int* result)


+ 18
- 17
common/JackSocketServerChannel.cpp View File

@@ -169,7 +169,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
ClientAdd(fd, req.fName, &res.fSharedEngine, &res.fSharedClient, &res.fSharedGraph, &res.fResult);
if (res.Write(socket) < 0)
jack_error("JackRequest::kClientOpen write error name = %s", req.fName);
jack_error("JackRequest::ClientOpen write error name = %s", req.fName);
break;
}

@@ -179,7 +179,8 @@ int JackSocketServerChannel::HandleRequest(int fd)
JackResult res;
if (req.Read(socket) == 0)
res.fResult = fServer->GetEngine()->ClientExternalClose(req.fRefNum);
// No write: client is actually doing an "ServerAsyncCall", and not interested by the result
if (res.Write(socket) < 0)
jack_error("JackRequest::ClientClose write error ref = %d", req.fRefNum);
ClientRemove(fd, req.fRefNum);
break;
}
@@ -191,7 +192,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum);
if (res.Write(socket) < 0)
jack_error("JackRequest::kActivateClient write error ref = %d", req.fRefNum);
jack_error("JackRequest::ActivateClient write error ref = %d", req.fRefNum);
break;
}

@@ -202,7 +203,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->GetEngine()->ClientDeactivate(req.fRefNum);
if (res.Write(socket) < 0)
jack_error("JackRequest::kDeactivateClient write error ref = %d", req.fRefNum);
jack_error("JackRequest::DeactivateClient write error ref = %d", req.fRefNum);
break;
}

@@ -213,7 +214,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->GetEngine()->PortRegister(req.fRefNum, req.fName, req.fPortType, req.fFlags, req.fBufferSize, &res.fPortIndex);
if (res.Write(socket) < 0)
jack_error("JackRequest::kRegisterPort write error ref = %d", req.fRefNum);
jack_error("JackRequest::RegisterPort write error ref = %d", req.fRefNum);
break;
}

@@ -224,7 +225,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->GetEngine()->PortUnRegister(req.fRefNum, req.fPortIndex);
if (res.Write(socket) < 0)
jack_error("JackRequest::kUnRegisterPort write error ref = %d", req.fRefNum);
jack_error("JackRequest::UnRegisterPort write error ref = %d", req.fRefNum);
break;
}

@@ -235,7 +236,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst);
if (res.Write(socket) < 0)
jack_error("JackRequest::kConnectNamePorts write error ref = %d", req.fRefNum);
jack_error("JackRequest::ConnectNamePorts write error ref = %d", req.fRefNum);
break;
}

@@ -246,7 +247,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst);
if (res.Write(socket) < 0)
jack_error("JackRequest::kDisconnectNamePorts write error ref = %d", req.fRefNum);
jack_error("JackRequest::DisconnectNamePorts write error ref = %d", req.fRefNum);
break;
}

@@ -257,7 +258,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst);
if (res.Write(socket) < 0)
jack_error("JackRequest::kConnectPorts write error ref = %d", req.fRefNum);
jack_error("JackRequest::ConnectPorts write error ref = %d", req.fRefNum);
break;
}

@@ -268,7 +269,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst);
if (res.Write(socket) < 0)
jack_error("JackRequest::kDisconnectPorts write error ref = %d", req.fRefNum);
jack_error("JackRequest::DisconnectPorts write error ref = %d", req.fRefNum);
break;
}

@@ -279,7 +280,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->SetBufferSize(req.fBufferSize);
if (res.Write(socket) < 0)
jack_error("JackRequest::kSetBufferSize write error");
jack_error("JackRequest::SetBufferSize write error");
break;
}

@@ -290,7 +291,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->SetFreewheel(req.fOnOff);
if (res.Write(socket) < 0)
jack_error("JackRequest::kSetFreeWheel write error");
jack_error("JackRequest::SetFreeWheel write error");
break;
}

@@ -312,7 +313,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->SetTimebaseCallback(req.fRefNum, req.fConditionnal);
if (res.Write(socket) < 0)
jack_error("JackRequest::kSetTimebaseCallback write error ref = %d", req.fRefNum);
jack_error("JackRequest::SetTimebaseCallback write error ref = %d", req.fRefNum);
break;
}

@@ -323,7 +324,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->GetEngine()->GetInternalClientName(req.fIntRefNum, res.fName);
if (res.Write(socket) < 0)
jack_error("JackRequest::kGetInternalClientName write error ref = %d", req.fRefNum);
jack_error("JackRequest::GetInternalClientName write error ref = %d", req.fRefNum);
break;
}

@@ -334,7 +335,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->GetEngine()->InternalClientHandle(req.fName, &res.fStatus, &res.fIntRefNum);
if (res.Write(socket) < 0)
jack_error("JackRequest::kInternalClientHandle write error ref = %d", req.fRefNum);
jack_error("JackRequest::InternalClientHandle write error ref = %d", req.fRefNum);
break;
}

@@ -345,7 +346,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->InternalClientLoad(req.fName, req.fDllName, req.fLoadInitName, req.fOptions, &res.fIntRefNum, &res.fStatus);
if (res.Write(socket) < 0)
jack_error("JackRequest::kInternalClientLoad write error name = %s", req.fName);
jack_error("JackRequest::InternalClientLoad write error name = %s", req.fName);
break;
}

@@ -356,7 +357,7 @@ int JackSocketServerChannel::HandleRequest(int fd)
if (req.Read(socket) == 0)
res.fResult = fServer->GetEngine()->InternalClientUnload(req.fIntRefNum, &res.fStatus);
if (res.Write(socket) < 0)
jack_error("JackRequest::kInternalClientUnload write error ref = %d", req.fRefNum);
jack_error("JackRequest::InternalClientUnload write error ref = %d", req.fRefNum);
break;
}



+ 2
- 1
macosx/JackMachThread.cpp View File

@@ -143,7 +143,8 @@ int JackMachThread::GetParams(UInt64* period, UInt64* computation, UInt64* const
int JackMachThread::Kill()
{
// pthread_cancel still not yet implemented in Darwin (TO CHECK ON TIGER)

jack_log("JackMachThread::Kill");
if (fThread) { // If thread has been started
mach_port_t machThread = pthread_mach_thread_np(fThread);
return (thread_terminate(machThread) == KERN_SUCCESS) ? 0 : -1;


+ 1
- 1
windows/JackWinNamedPipeClientChannel.cpp View File

@@ -165,7 +165,7 @@ void JackWinNamedPipeClientChannel::ClientClose(int refnum, int* result)
{
JackClientCloseRequest req(refnum);
JackResult res;
ServerAsyncCall(&req, &res, result);
ServerSyncCall(&req, &res, result);
}

void JackWinNamedPipeClientChannel::ClientActivate(int refnum, int* result)


+ 8
- 8
windows/JackWinNamedPipeServerChannel.cpp View File

@@ -108,7 +108,7 @@ int JackClientPipeThread::HandleRequest()
switch (header.fType) {

case JackRequest::kClientCheck: {
jack_log("JackRequest::kClientCheck");
jack_log("JackRequest::ClientCheck");
JackClientCheckRequest req;
JackClientCheckResult res;
if (req.Read(fPipe) == 0)
@@ -133,7 +133,7 @@ int JackClientPipeThread::HandleRequest()
JackResult res;
if (req.Read(fPipe) == 0)
res.fResult = fServer->GetEngine()->ClientExternalClose(req.fRefNum);
// No write: client is actually doing an "ServerAsyncCall", and not interested by the result
res.Write(fPipe);
ClientRemove();
ret = -1;
break;
@@ -240,7 +240,7 @@ int JackClientPipeThread::HandleRequest()
}

case JackRequest::kReleaseTimebase: {
jack_log("JackRequest::kReleaseTimebase");
jack_log("JackRequest::ReleaseTimebase");
JackReleaseTimebaseRequest req;
JackResult res;
if (req.Read(fPipe) == 0)
@@ -250,7 +250,7 @@ int JackClientPipeThread::HandleRequest()
}

case JackRequest::kSetTimebaseCallback: {
jack_log("JackRequest::kSetTimebaseCallback");
jack_log("JackRequest::SetTimebaseCallback");
JackSetTimebaseCallbackRequest req;
JackResult res;
if (req.Read(fPipe) == 0)
@@ -260,7 +260,7 @@ int JackClientPipeThread::HandleRequest()
}

case JackRequest::kGetInternalClientName: {
jack_log("JackRequest::kGetInternalClientName");
jack_log("JackRequest::GetInternalClientName");
JackGetInternalClientNameRequest req;
JackGetInternalClientNameResult res;
if (req.Read(fPipe) == 0)
@@ -270,7 +270,7 @@ int JackClientPipeThread::HandleRequest()
}

case JackRequest::kInternalClientHandle: {
jack_log("JackRequest::kInternalClientHandle");
jack_log("JackRequest::InternalClientHandle");
JackInternalClientHandleRequest req;
JackInternalClientHandleResult res;
if (req.Read(fPipe) == 0)
@@ -280,7 +280,7 @@ int JackClientPipeThread::HandleRequest()
}

case JackRequest::kInternalClientLoad: {
jack_log("JackRequest::kInternalClientLoad");
jack_log("JackRequest::InternalClientLoad");
JackInternalClientLoadRequest req;
JackInternalClientLoadResult res;
if (req.Read(fPipe) == 0)
@@ -290,7 +290,7 @@ int JackClientPipeThread::HandleRequest()
}

case JackRequest::kInternalClientUnload: {
jack_log("JackRequest::kInternalClientUnload");
jack_log("JackRequest::InternalClientUnload");
JackInternalClientUnloadRequest req;
JackInternalClientUnloadResult res;
if (req.Read(fPipe) == 0)


Loading…
Cancel
Save