summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorsletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224>2006-09-08 16:12:35 +0000
committersletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224>2006-09-08 16:12:35 +0000
commit00a8d52a5bdbcfa5da98af0c55c291a7b8ea4837 (patch)
treea8240d4c1835e4f3ed86af8ae9a4e6fdb3f60550 /common
parent50a70c51fbc8a10e8d2db8c95642620f9c40ff66 (diff)
downloadjack2-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.cpp6
-rw-r--r--common/JackExternalClient.cpp2
-rw-r--r--common/JackLibClient.cpp2
-rw-r--r--common/JackPosixThread.cpp13
-rw-r--r--common/JackRequest.h5
-rw-r--r--common/JackSocketServerChannel.cpp60
-rw-r--r--common/JackThread.h7
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