diff --git a/common/JackFreewheelDriver.cpp b/common/JackFreewheelDriver.cpp index d0234f3b..dcf773d6 100644 --- a/common/JackFreewheelDriver.cpp +++ b/common/JackFreewheelDriver.cpp @@ -45,7 +45,7 @@ int JackFreewheelDriver::Process() // Special "SuspendRefNum" with longer timeout if (SuspendRefNum() < 0) { // Wait for all clients to finish for 10 sec - jack_error("JackFreewheelDriver::ProcessSync: SuspendRefNum error"); + jack_error("JackFreewheelDriver::Process: SuspendRefNum error"); /* We have a client time-out error, but still continue to process, until a better recovery strategy is chosen */ return 0; } @@ -74,7 +74,7 @@ int JackFreewheelDriver::ProcessWriteSync() { // Generic "SuspendRefNum" here if (JackDriver::SuspendRefNum() < 0) { - jack_error("JackFreewheelDriver::ProcessSync SuspendRefNum error"); + jack_error("JackFreewheelDriver::ProcessSync: SuspendRefNum error"); return -1; } return 0; diff --git a/common/JackServer.cpp b/common/JackServer.cpp index d2e09ac6..729608d0 100644 --- a/common/JackServer.cpp +++ b/common/JackServer.cpp @@ -279,7 +279,7 @@ int JackServer::SetFreewheel(bool onoff) } else { fFreewheel = false; fThreadedFreewheelDriver->Stop(); - fGraphManager->Restore(&fConnectionState); // Restore previous connection state + fGraphManager->Restore(&fConnectionState); // Restore connection state fEngine->NotifyFreewheel(onoff); fFreewheelDriver->SetMaster(false); fAudioDriver->SetMaster(true); @@ -290,6 +290,15 @@ int JackServer::SetFreewheel(bool onoff) fFreewheel = true; fAudioDriver->Stop(); fGraphManager->Save(&fConnectionState); // Save connection state + // Disconnect all slaves + std::list slave_list = fAudioDriver->GetSlaves(); + std::list::const_iterator it; + for (it = slave_list.begin(); it != slave_list.end(); it++) { + JackDriver* slave = dynamic_cast(*it); + assert(slave); + fGraphManager->DisconnectAllPorts(slave->GetClientControl()->fRefNum); + } + // Disconnect master fGraphManager->DisconnectAllPorts(fAudioDriver->GetClientControl()->fRefNum); fEngine->NotifyFreewheel(onoff); fAudioDriver->SetMaster(false);