Browse Source

Fix in JackServer::SetFreewheel.

tags/v1.9.10
Stephane Letz 12 years ago
parent
commit
0fc84b9c48
2 changed files with 12 additions and 3 deletions
  1. +2
    -2
      common/JackFreewheelDriver.cpp
  2. +10
    -1
      common/JackServer.cpp

+ 2
- 2
common/JackFreewheelDriver.cpp View File

@@ -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;


+ 10
- 1
common/JackServer.cpp View File

@@ -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<JackDriverInterface*> slave_list = fAudioDriver->GetSlaves();
std::list<JackDriverInterface*>::const_iterator it;
for (it = slave_list.begin(); it != slave_list.end(); it++) {
JackDriver* slave = dynamic_cast<JackDriver*>(*it);
assert(slave);
fGraphManager->DisconnectAllPorts(slave->GetClientControl()->fRefNum);
}
// Disconnect master
fGraphManager->DisconnectAllPorts(fAudioDriver->GetClientControl()->fRefNum);
fEngine->NotifyFreewheel(onoff);
fAudioDriver->SetMaster(false);


Loading…
Cancel
Save