Browse Source

More robust activation/deactivation code, especially in case of client crash.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1376 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.62
sletz 19 years ago
parent
commit
ecf668edc8
6 changed files with 8 additions and 56 deletions
  1. +4
    -0
      ChangeLog
  2. +3
    -4
      common/JackInternalClientChannel.h
  3. +1
    -45
      common/JackServer.cpp
  4. +0
    -3
      common/JackServer.h
  5. +0
    -2
      macosx/JackMacEngineRPC.cpp
  6. +0
    -2
      windows/JackWinNamedPipeServerChannel.cpp

+ 4
- 0
ChangeLog View File

@@ -2,6 +2,10 @@
Jackdmp changes log
---------------------------

2007-01-29 Stephane Letz <letz@grame.fr>

* More robust activation/deactivation code, especially in case of client crash.

2007-01-27 Stephane Letz <letz@grame.fr>

* Uses a time out value of 10 sec in freewheel mode (like jack).


+ 3
- 4
common/JackInternalClientChannel.h View File

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


+ 1
- 45
common/JackServer.cpp View File

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


+ 0
- 3
common/JackServer.h View File

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


+ 0
- 2
macosx/JackMacEngineRPC.cpp View File

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


+ 0
- 2
windows/JackWinNamedPipeServerChannel.cpp View File

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


Loading…
Cancel
Save