diff --git a/ChangeLog b/ChangeLog index f1d84491..af704b48 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,10 @@ Jackdmp changes log --------------------------- +2007-01-29 Stephane Letz + + * More robust activation/deactivation code, especially in case of client crash. + 2007-01-27 Stephane Letz * Uses a time out value of 10 sec in freewheel mode (like jack). diff --git a/common/JackInternalClientChannel.h b/common/JackInternalClientChannel.h index 1000ca8f..81386864 100644 --- a/common/JackInternalClientChannel.h +++ b/common/JackInternalClientChannel.h @@ -52,15 +52,14 @@ class JackInternalClientChannel : public JackClientChannelInterface { *result = fEngine->ClientInternalClose(refnum); } + void ClientActivate(int refnum, int* result) { - //*result = fServer->Activate(refnum); - *result = fEngine->ClientActivate(refnum); + *result = fEngine->ClientActivate(refnum); } void ClientDeactivate(int refnum, int* result) { - //*result = fServer->Deactivate(refnum); - *result = fEngine->ClientDeactivate(refnum); + *result = fEngine->ClientDeactivate(refnum); } void PortRegister(int refnum, const char* name, unsigned int flags, unsigned int buffer_size, jack_port_id_t* port_index, int* result) diff --git a/common/JackServer.cpp b/common/JackServer.cpp index a41b6f6a..62e94a23 100644 --- a/common/JackServer.cpp +++ b/common/JackServer.cpp @@ -188,48 +188,6 @@ int JackServer::Stop() return fAudioDriver->Stop(); } -/* -int JackServer::Activate(int refnum) -{ - fGraphManager->DirectConnect(FREEWHEEL_DRIVER_REFNUM, refnum); - fGraphManager->DirectConnect(refnum, FREEWHEEL_DRIVER_REFNUM); - return fEngine->ClientActivate(refnum); -} - -// Disconnection from the FW must be done in last otherwise an intermediate "unconnected" -// (thus unactivated) state may happen where the client is still checked for its end. -int JackServer::Deactivate(int refnum) -{ - int res = fEngine->ClientDeactivate(refnum); - - // Disconnect only when needed - if (fGraphManager->IsDirectConnection(refnum, FREEWHEEL_DRIVER_REFNUM)) { - fGraphManager->DirectDisconnect(refnum, FREEWHEEL_DRIVER_REFNUM); - } else { - JackLog("JackServer::Deactivate: client = %ld was not activated \n", refnum); - } - - // Disconnect only when needed - if (fGraphManager->IsDirectConnection(FREEWHEEL_DRIVER_REFNUM, refnum)) { - fGraphManager->DirectDisconnect(FREEWHEEL_DRIVER_REFNUM, refnum); - } else { - JackLog("JackServer::Deactivate: client = %ld was not activated \n", refnum); - } - - return res; -} - -int JackServer::Activate(int refnum) -{ - return fEngine->ClientActivate(refnum); -} - -int JackServer::Deactivate(int refnum) -{ - return fEngine->ClientDeactivate(refnum); -} -*/ - int JackServer::SetBufferSize(jack_nframes_t buffer_size) { JackLog("JackServer::SetBufferSize nframes = %ld\n", buffer_size); @@ -245,7 +203,7 @@ int JackServer::SetBufferSize(jack_nframes_t buffer_size) fEngine->NotifyBufferSize(buffer_size); fEngineControl->InitFrameTime(); return fAudioDriver->Start(); - } else { // Failure: restore current value + } else { // Failure: try to restore current value jack_error("Cannot SetBufferSize for audio driver, restore current value %ld", current_buffer_size); fFreewheelDriver->SetBufferSize(current_buffer_size); fEngineControl->InitFrameTime(); @@ -315,8 +273,6 @@ void JackServer::Notify(int refnum, int notify, int value) case JackNotifyChannelInterface::kDeadClient: JackLog("JackServer: kDeadClient ref = %ld\n", refnum); - //if (Deactivate(refnum) < 0) - // jack_error("JackServer: DeadClient ref = %ld cannot be removed from the graph !!", refnum); if (fEngine->ClientDeactivate(refnum) < 0) jack_error("JackServer: DeadClient ref = %ld cannot be removed from the graph !!", refnum); fEngine->ClientClose(refnum); diff --git a/common/JackServer.h b/common/JackServer.h index d6becc85..cd4e335c 100644 --- a/common/JackServer.h +++ b/common/JackServer.h @@ -72,9 +72,6 @@ class EXPORT JackServer int Start(); int Stop(); - //int Activate(int refnum); - //int Deactivate(int refnum); - int SetBufferSize(jack_nframes_t buffer_size); int SetFreewheel(bool onoff); void Notify(int refnum, int notify, int value); diff --git a/macosx/JackMacEngineRPC.cpp b/macosx/JackMacEngineRPC.cpp index 2e415df2..a55e307d 100644 --- a/macosx/JackMacEngineRPC.cpp +++ b/macosx/JackMacEngineRPC.cpp @@ -55,7 +55,6 @@ rpc_type server_rpc_jack_client_activate(mach_port_t private_port, int refnum, i JackLog("rpc_jack_client_activate\n"); JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port]; assert(channel); - //*result = channel->GetServer()->Activate(refnum); *result = channel->GetEngine()->ClientActivate(refnum); return KERN_SUCCESS; } @@ -65,7 +64,6 @@ rpc_type server_rpc_jack_client_deactivate(mach_port_t private_port, int refnum, JackLog("rpc_jack_client_deactivate\n"); JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port]; assert(channel); - //*result = channel->GetServer()->Deactivate(refnum); *result = channel->GetEngine()->ClientDeactivate(refnum); return KERN_SUCCESS; } diff --git a/windows/JackWinNamedPipeServerChannel.cpp b/windows/JackWinNamedPipeServerChannel.cpp index b7ba5da6..285a122d 100644 --- a/windows/JackWinNamedPipeServerChannel.cpp +++ b/windows/JackWinNamedPipeServerChannel.cpp @@ -133,7 +133,6 @@ int JackClientPipeThread::HandleRequest() JackResult res; JackLog("JackRequest::ActivateClient\n"); if (req.Read(fPipe) == 0) - //res.fResult = fServer->Activate(req.fRefNum); res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum); res.Write(fPipe); break; @@ -144,7 +143,6 @@ int JackClientPipeThread::HandleRequest() JackDeactivateRequest req; JackResult res; if (req.Read(fPipe) == 0) - //res.fResult = fServer->Deactivate(req.fRefNum); res.fResult = fServer->GetEngine()->ClientDeactivate(req.fRefNum); res.Write(fPipe); break;