diff --git a/ChangeLog b/ChangeLog index cedbc8ee..755d191e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -18,6 +18,11 @@ Marc-Olivier Barre Jackdmp changes log --------------------------- +2008-03-06 Stephane Letz + + * Fix JackSocketClientChannel::ClientClose: async call from the client and server does not need to write any reply. + * Correct port notification: 2 notifications have to be sent (src, dst) and (dst, src)... + 2008-03-05 Stephane Letz * libjackdmp.so renamed to libjackservermp.so and same for OSX framework. diff --git a/common/JackEngine.cpp b/common/JackEngine.cpp index 4ee3d8ad..c7399836 100644 --- a/common/JackEngine.cpp +++ b/common/JackEngine.cpp @@ -562,7 +562,7 @@ int JackEngine::ClientCloseAux(int refnum, JackClientInterface* client, bool wai ReleaseRefnum(refnum); // Notiy unregister - jack_int_t ports[PORT_NUM_FOR_CLIENT]; + jack_int_t ports[PORT_NUM_FOR_CLIENT]; int i; fGraphManager->GetInputPorts(refnum, ports); @@ -704,8 +704,10 @@ int JackEngine::PortConnect(int refnum, jack_port_id_t src, jack_port_id_t dst) } int res = fGraphManager->Connect(src, dst); - if (res == 0) + if (res == 0) { NotifyPortConnect(src, dst, true); + NotifyPortConnect(dst, src, true); + } return res; } @@ -718,6 +720,7 @@ int JackEngine::PortDisconnect(int refnum, const char* src, const char* dst) return -1; } else if (fGraphManager->Disconnect(port_src, port_dst) == 0){ NotifyPortConnect(port_src, port_dst, false); + NotifyPortConnect(port_dst, port_src, false); return 0; } else { return -1; @@ -739,11 +742,13 @@ int JackEngine::PortDisconnect(int refnum, jack_port_id_t src, jack_port_id_t ds for (int i = 0; (i < CONNECTION_NUM) && (connections[i] != EMPTY); i++) { JackLog("NotifyPortConnect src = %ld dst = %ld false\n", src, connections[i]); NotifyPortConnect(src, connections[i], false); + NotifyPortConnect(connections[i], src, false); } } else { for (int i = 0; (i < CONNECTION_NUM) && (connections[i] != EMPTY); i++) { JackLog("NotifyPortConnect src = %ld dst = %ld false\n", connections[i], src); NotifyPortConnect(connections[i], src, false); + NotifyPortConnect(connections[i], src, false); } } @@ -753,6 +758,7 @@ int JackEngine::PortDisconnect(int refnum, jack_port_id_t src, jack_port_id_t ds } else if (fGraphManager->Disconnect(src, dst) == 0) { // Notifications NotifyPortConnect(src, dst, false); + NotifyPortConnect(dst, src, false); return 0; } else { return -1; diff --git a/common/JackSocketClientChannel.cpp b/common/JackSocketClientChannel.cpp index 8c382c40..627d510a 100644 --- a/common/JackSocketClientChannel.cpp +++ b/common/JackSocketClientChannel.cpp @@ -162,7 +162,7 @@ void JackSocketClientChannel::ClientClose(int refnum, int* result) { JackClientCloseRequest req(refnum); JackResult res; - ServerSyncCall(&req, &res, result); + ServerAsyncCall(&req, &res, result); } void JackSocketClientChannel::ClientActivate(int refnum, int* result) diff --git a/common/JackSocketServerChannel.cpp b/common/JackSocketServerChannel.cpp index e0a207bd..336a1a47 100644 --- a/common/JackSocketServerChannel.cpp +++ b/common/JackSocketServerChannel.cpp @@ -179,9 +179,8 @@ int JackSocketServerChannel::HandleRequest(int fd) JackResult res; if (req.Read(socket) == 0) res.fResult = fServer->GetEngine()->ClientExternalClose(req.fRefNum); - if (res.Write(socket) < 0) - jack_error("JackRequest::kClientClose write error ref = %d", req.fRefNum); - ClientRemove(fd, req.fRefNum); + // No write: client is actually doing an "ServerAsyncCall", and not interested by the result + ClientRemove(fd, req.fRefNum); break; }