diff options
author | sletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2006-09-08 16:12:35 +0000 |
---|---|---|
committer | sletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2006-09-08 16:12:35 +0000 |
commit | 00a8d52a5bdbcfa5da98af0c55c291a7b8ea4837 (patch) | |
tree | a8240d4c1835e4f3ed86af8ae9a4e6fdb3f60550 /common | |
parent | 50a70c51fbc8a10e8d2db8c95642620f9c40ff66 (diff) | |
download | jack2-00a8d52a5bdbcfa5da98af0c55c291a7b8ea4837.tar.gz |
Correct crash bug when closing clients in Windows version
git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1231 0c269be4-1314-0410-8aa9-9f06e86f4224
Diffstat (limited to 'common')
-rw-r--r-- | common/JackEngine.cpp | 6 | ||||
-rw-r--r-- | common/JackExternalClient.cpp | 2 | ||||
-rw-r--r-- | common/JackLibClient.cpp | 2 | ||||
-rw-r--r-- | common/JackPosixThread.cpp | 13 | ||||
-rw-r--r-- | common/JackRequest.h | 5 | ||||
-rw-r--r-- | common/JackSocketServerChannel.cpp | 60 | ||||
-rw-r--r-- | common/JackThread.h | 7 |
7 files changed, 50 insertions, 45 deletions
diff --git a/common/JackEngine.cpp b/common/JackEngine.cpp index 1f2345ec..c4a244a4 100644 --- a/common/JackEngine.cpp +++ b/common/JackEngine.cpp @@ -344,7 +344,7 @@ int JackEngine::ClientNew(const char* name, int* ref, int* shared_engine, int* s // Used for external clients int JackEngine::ClientExternalNew(const char* name, int* ref, int* shared_engine, int* shared_client, int* shared_graph_manager, JackExternalClient* client) { - JackLog("JackEngine::ClientNew: name %s \n", name); + JackLog("JackEngine::ClientNew: name = %s \n", name); int refnum = fGraphManager->AllocateRefNum(); if (refnum < 0) { @@ -390,7 +390,7 @@ error: // Used for server driver clients int JackEngine::ClientInternalNew(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client) { - JackLog("JackEngine::ClientInternalNew: name %s\n", name); + JackLog("JackEngine::ClientInternalNew: name = %s\n", name); int refnum = fGraphManager->AllocateRefNum(); if (refnum < 0) { @@ -529,7 +529,7 @@ int JackEngine::PortRegister(int refnum, const char* name, unsigned int flags, u int JackEngine::PortUnRegister(int refnum, jack_port_id_t port_index) { - JackLog("JackEngine::PortUnRegister ref = %ld port_index = %ld\n", refnum, port_index); + JackLog("JackEngine::PortUnRegister ref = %ld port_index = %ld\n", refnum, port_index); assert(fClientTable[refnum]); if (fGraphManager->RemovePort(refnum, port_index) == 0) { diff --git a/common/JackExternalClient.cpp b/common/JackExternalClient.cpp index a637e6c7..5390e2c6 100644 --- a/common/JackExternalClient.cpp +++ b/common/JackExternalClient.cpp @@ -49,7 +49,7 @@ int JackExternalClient::Open(const char* name, int refnum, int* shared_client) try { if (fChannel->Open(name) < 0) { - jack_error("Cannot connect to client name = %s port\n", name); + jack_error("Cannot connect to client name = %s\n", name); return -1; } diff --git a/common/JackLibClient.cpp b/common/JackLibClient.cpp index 45b49e09..840a6b1a 100644 --- a/common/JackLibClient.cpp +++ b/common/JackLibClient.cpp @@ -104,7 +104,7 @@ int JackLibClient::Open(const char* name) goto error; } - JackLog("JackLibClient::Open: name, refnum %s %ld\n", name, fClientControl->fRefNum); + JackLog("JackLibClient::Open name = %s refnum = %ld\n", name, fClientControl->fRefNum); return 0; error: diff --git a/common/JackPosixThread.cpp b/common/JackPosixThread.cpp index 32b3b686..7572418b 100644 --- a/common/JackPosixThread.cpp +++ b/common/JackPosixThread.cpp @@ -43,12 +43,10 @@ void* JackPosixThread::ThreadHandler(void* arg) JackLog("ThreadHandler: start\n"); - // If Init succeed start the thread loop - bool res = true; - while (obj->fRunning && res) { - res = runnable->Execute(); - //pthread_testcancel(); - } + // If Init succeed, start the thread loop
+ while ((obj->fRunning = runnable->Execute())) {
+ //pthread_testcancel();
+ } JackLog("ThreadHandler: exit\n"); return 0; @@ -134,7 +132,8 @@ int JackPosixThread::Kill() JackLog("JackPosixThread::Kill\n"); void* status; pthread_cancel(fThread); - pthread_join(fThread, &status); + pthread_join(fThread, &status);
+ fRunning = false; return 0; } else { return -1; diff --git a/common/JackRequest.h b/common/JackRequest.h index e096ed8f..39e63ea5 100644 --- a/common/JackRequest.h +++ b/common/JackRequest.h @@ -153,10 +153,11 @@ struct JackClientNewResult : public JackResult int fSharedPorts; uint32_t fProtocolVersion; - JackClientNewResult() + JackClientNewResult()
+ :fSharedEngine(-1), fSharedClient(-1), fSharedPorts(-1), fProtocolVersion(0) {} JackClientNewResult(int32_t status, int index1, int index2, int index3) - : JackResult(status), fSharedEngine(index1), fSharedClient(index2), fSharedPorts(index3), fProtocolVersion(0) + : JackResult(status), fSharedEngine(index1), fSharedClient(index2), fSharedPorts(index3), fProtocolVersion(0) {} virtual int Read(JackChannelTransaction* trans) diff --git a/common/JackSocketServerChannel.cpp b/common/JackSocketServerChannel.cpp index 5ec70edb..f138a086 100644 --- a/common/JackSocketServerChannel.cpp +++ b/common/JackSocketServerChannel.cpp @@ -154,8 +154,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::ClientNew\n"); JackClientNewRequest req; JackClientNewResult res; - req.Read(socket); - AddClient(fd, req.fName, &res.fSharedEngine, &res.fSharedClient, &res.fSharedPorts, &res.fResult); + if (req.Read(socket) == 0) + AddClient(fd, req.fName, &res.fSharedEngine, &res.fSharedClient, &res.fSharedPorts, &res.fResult); res.Write(socket); break; } @@ -164,8 +164,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::ClientClose\n"); JackClientCloseRequest req; JackResult res; - req.Read(socket); - res.fResult = fServer->GetEngine()->ClientClose(req.fRefNum); + if (req.Read(socket) == 0) + res.fResult = fServer->GetEngine()->ClientClose(req.fRefNum); res.Write(socket); RemoveClient(fd, req.fRefNum); break; @@ -175,8 +175,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackActivateRequest req; JackResult res; JackLog("JackRequest::ActivateClient\n"); - req.Read(socket); - res.fResult = fServer->Activate(req.fRefNum); + if (req.Read(socket) == 0) + res.fResult = fServer->Activate(req.fRefNum); res.Write(socket); break; } @@ -185,8 +185,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::DeactivateClient\n"); JackDeactivateRequest req; JackResult res; - req.Read(socket); - res.fResult = fServer->Deactivate(req.fRefNum); + if (req.Read(socket) == 0) + res.fResult = fServer->Deactivate(req.fRefNum); res.Write(socket); break; } @@ -195,8 +195,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::RegisterPort\n"); JackPortRegisterRequest req; JackPortRegisterResult res; - req.Read(socket); - res.fResult = fServer->GetEngine()->PortRegister(req.fRefNum, req.fName, req.fFlags, req.fBufferSize, &res.fPortIndex); + if (req.Read(socket) == 0) + res.fResult = fServer->GetEngine()->PortRegister(req.fRefNum, req.fName, req.fFlags, req.fBufferSize, &res.fPortIndex); res.Write(socket); break; } @@ -205,8 +205,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::UnRegisterPort\n"); JackPortUnRegisterRequest req; JackResult res; - req.Read(socket); - res.fResult = fServer->GetEngine()->PortUnRegister(req.fRefNum, req.fPortIndex); + if (req.Read(socket) == 0) + res.fResult = fServer->GetEngine()->PortUnRegister(req.fRefNum, req.fPortIndex); res.Write(socket); break; } @@ -215,8 +215,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::ConnectPorts\n"); JackPortConnectNameRequest req; JackResult res; - req.Read(socket); - res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst); + if (req.Read(socket) == 0) + res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst); res.Write(socket); break; } @@ -225,8 +225,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::DisconnectPorts\n"); JackPortDisconnectNameRequest req; JackResult res; - req.Read(socket); - res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst); + if (req.Read(socket) == 0) + res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst); res.Write(socket); break; } @@ -235,8 +235,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::ConnectPorts\n"); JackPortConnectRequest req; JackResult res; - req.Read(socket); - res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst); + if (req.Read(socket) == 0) + res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst); res.Write(socket); break; } @@ -245,8 +245,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::DisconnectPorts\n"); JackPortDisconnectRequest req; JackResult res; - req.Read(socket); - res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst); + if (req.Read(socket) == 0) + res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst); res.Write(socket); break; } @@ -255,8 +255,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::SetBufferSize\n"); JackSetBufferSizeRequest req; JackResult res; - req.Read(socket); - res.fResult = fServer->SetBufferSize(req.fBufferSize); + if (req.Read(socket) == 0) + res.fResult = fServer->SetBufferSize(req.fBufferSize); res.Write(socket); break; } @@ -265,8 +265,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::SetFreeWheel\n"); JackSetFreeWheelRequest req; JackResult res; - req.Read(socket); - res.fResult = fServer->SetFreewheel(req.fOnOff); + if (req.Read(socket) == 0) + res.fResult = fServer->SetFreewheel(req.fOnOff); res.Write(socket); break; } @@ -275,8 +275,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::kReleaseTimebase\n"); JackReleaseTimebaseRequest req; JackResult res; - req.Read(socket); - res.fResult = fServer->GetEngine()->ReleaseTimebase(req.fRefNum); + if (req.Read(socket) == 0) + res.fResult = fServer->GetEngine()->ReleaseTimebase(req.fRefNum); res.Write(socket); break; } @@ -285,8 +285,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackLog("JackRequest::kSetTimebaseCallback\n"); JackSetTimebaseCallbackRequest req; JackResult res; - req.Read(socket); - res.fResult = fServer->GetEngine()->SetTimebaseCallback(req.fRefNum, req.fConditionnal); + if (req.Read(socket) == 0) + res.fResult = fServer->GetEngine()->SetTimebaseCallback(req.fRefNum, req.fConditionnal); res.Write(socket); break; } @@ -294,8 +294,8 @@ int JackSocketServerChannel::HandleRequest(int fd) case JackRequest::kNotification: { JackLog("JackRequest::Notification\n"); JackClientNotificationRequest req; - req.Read(socket); - fServer->Notify(req.fRefNum, req.fNotify, req.fValue); + if (req.Read(socket) == 0) + fServer->Notify(req.fRefNum, req.fNotify, req.fValue); break; } diff --git a/common/JackThread.h b/common/JackThread.h index 1a7aad00..a0791ab0 100644 --- a/common/JackThread.h +++ b/common/JackThread.h @@ -89,7 +89,12 @@ class JackThread virtual void SetParams(UInt64 period, UInt64 computation, UInt64 constraint) // Empty implementation, will only make sense on OSX... {} - virtual pthread_t GetThreadID() = 0; + virtual pthread_t GetThreadID() = 0;
+
+ bool IsRunning()
+ {
+ return fRunning;
+ } }; } // end of namespace |