Commit cc80ecb6 authored by sletz's avatar sletz
Browse files

Cleanup old zombification code.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1664 0c269be4-1314-0410-8aa9-9f06e86f4224
parent 7fd9bdaa
......@@ -16,6 +16,7 @@ Tom Szilagyi
2007-10-26 Stephane Letz <letz@grame.fr>
* Add midiseq and midisine examples.
* Cleanup old zombification code.
2007-10-25 Stephane Letz <letz@grame.fr>
......
......@@ -25,7 +25,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackEngineControl.h"
#include "JackGlobals.h"
#include "JackChannel.h"
#include "JackTransportEngine.h"
#include "JackTransportEngine.h"
#include "driver_interface.h"
#include <math.h>
#include <string>
......@@ -210,10 +210,6 @@ int JackClient::ClientNotify(int refnum, const char* name, int notify, int sync,
res = fXrun(fXrunArg);
break;
case kZombifyClient:
JackLog("JackClient::kZombifyClient name = %s ref = %ld \n", name, refnum);
ShutDown();
break;
}
}
......
......@@ -40,7 +40,6 @@ struct JackClientControl : public JackShmMem
bool fCallback[kMaxNotification];
volatile jack_transport_state_t fTransportState;
int fRefNum;
bool fZombie;
bool fActive;
JackClientControl(const char* name, int refnum)
......@@ -69,7 +68,6 @@ struct JackClientControl : public JackShmMem
fCallback[kActivateClient] = true;
fRefNum = refnum;
fTransportState = JackTransportStopped;
fZombie = false;
fActive = false;
}
......
......@@ -160,8 +160,7 @@ bool JackEngine::Process(jack_time_t callback_usecs)
JackLog("Process: graph not finished!\n");
if (callback_usecs > fLastSwitchUsecs + fEngineControl->fTimeOutUsecs) {
JackLog("Process: switch to next state delta = %ld\n", long(callback_usecs - fLastSwitchUsecs));
//RemoveZombifiedClients(callback_usecs); TODO
ProcessNext(callback_usecs);
ProcessNext(callback_usecs);
res = true;
} else {
JackLog("Process: waiting to switch delta = %ld\n", long(callback_usecs - fLastSwitchUsecs));
......@@ -192,71 +191,17 @@ void JackEngine::CheckXRun(jack_time_t callback_usecs) // REVOIR les conditions
if (status != NotTriggered && status != Finished) {
jack_error("JackEngine::XRun: client = %s was not run: state = %ld", client->GetClientControl()->fName, status);
//fChannel->ClientNotify(i, kXRunCallback, 0); // Notify the failing client
fChannel->ClientNotify(ALL_CLIENTS, kXRunCallback, 0); // Notify all clients
}
if (status == Finished && (long)(finished_date - callback_usecs) > 0) {
jack_error("JackEngine::XRun: client %s finished after current callback", client->GetClientControl()->fName);
//fChannel->ClientNotify(i, kXRunCallback, 0); // Notify the failing client
fChannel->ClientNotify(ALL_CLIENTS, kXRunCallback, 0); // Notify all clients
}
}
}
}
//---------------
// Zombification
//---------------
bool JackEngine::IsZombie(JackClientInterface* client, jack_time_t current_time)
{
return ((current_time - fGraphManager->GetClientTiming(client->GetClientControl()->fRefNum)->fFinishedAt) > 2 * fEngineControl->fTimeOutUsecs); // A VERIFIER
}
// TODO : check what happens with looped sub-graph....
void JackEngine::GetZombifiedClients(bool zombi_clients[CLIENT_NUM], jack_time_t current_time)
{
for (int i = REAL_REFNUM; i < CLIENT_NUM; i++) {
JackClientInterface* client1 = fClientTable[i];
if (client1 && IsZombie(client1, current_time)) {
JackLog("JackEngine::GetZombifiedClients: %s\n", client1->GetClientControl()->fName);
zombi_clients[i] = true; // Assume client is dead
// If another dead client is connected to the scanned one, then the scanned one is not the first of the dead subgraph
for (int j = REAL_REFNUM; j < CLIENT_NUM; j++) {
JackClientInterface* client2 = fClientTable[j];
if (client2 && IsZombie(client2, current_time) && fGraphManager->IsDirectConnection(j, i)) {
zombi_clients[i] = false;
break;
}
}
} else {
zombi_clients[i] = false;
}
}
}
void JackEngine::RemoveZombifiedClients(jack_time_t current_time)
{
bool zombi_clients[CLIENT_NUM];
GetZombifiedClients(zombi_clients, current_time);
for (int i = REAL_REFNUM; i < CLIENT_NUM; i++) {
if (zombi_clients[i] && !fClientTable[i]->GetClientControl()->fZombie) {
fClientTable[i]->GetClientControl()->fZombie = true;
JackLog("RemoveZombifiedCients: name = %s\n", fClientTable[i]->GetClientControl()->fName);
fGraphManager->DirectDisconnect(FREEWHEEL_DRIVER_REFNUM, i);
fGraphManager->DirectDisconnect(i, FREEWHEEL_DRIVER_REFNUM);
fGraphManager->DisconnectAllPorts(i);
fChannel->ClientNotify(i, kZombifyClient, 0); // Signal engine
}
}
}
void JackEngine::ZombifyClient(int refnum)
{
NotifyClient(refnum, kZombifyClient, false, 0);
}
//---------------
// Notifications
//---------------
......
......@@ -55,11 +55,7 @@ class JackEngine
int NotifyAddClient(JackClientInterface* new_client, const char* name, int refnum);
void NotifyRemoveClient(const char* name, int refnum);
bool IsZombie(JackClientInterface* client, jack_time_t current_time);
void RemoveZombifiedClients(jack_time_t current_time);
void GetZombifiedClients(bool clients[CLIENT_NUM], jack_time_t current_time);
void ProcessNext(jack_time_t callback_usecs);
void ProcessCurrent(jack_time_t callback_usecs);
......@@ -109,8 +105,7 @@ class JackEngine
// Graph
bool Process(jack_time_t callback_usecs);
void ZombifyClient(int refnum);
// Notifications
void NotifyClient(int refnum, int event, int sync, int value);
void NotifyClients(int event, int sync, int value);
......
......@@ -33,8 +33,7 @@ namespace Jack
kStopFreewheelCallback = 7,
kPortRegistrationOnCallback = 8,
kPortRegistrationOffCallback = 9,
kZombifyClient = 10,
kDeadClient = 11,
kDeadClient = 10,
kMaxNotification
};
......
......@@ -287,10 +287,6 @@ void JackServer::Notify(int refnum, int notify, int value)
fEngine->NotifyXRun(refnum);
break;
case kZombifyClient:
fEngine->ZombifyClient(refnum);
break;
case kDeadClient:
JackLog("JackServer: kDeadClient ref = %ld\n", refnum);
if (fEngine->ClientDeactivate(refnum) < 0)
......
......@@ -312,14 +312,14 @@
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B5A1BB10CD1CB9E0005BF74 /* jack_midiseq */;
remoteGlobalIDString = 4B5A1BB10CD1CB9E0005BF74;
remoteInfo = jack_midiseq;
};
4B5A1BE10CD1CD730005BF74 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 4B5A1BD00CD1CCE10005BF74 /* jack_midisine */;
remoteGlobalIDString = 4B5A1BD00CD1CCE10005BF74;
remoteInfo = jack_midisine;
};
4B699DB3097D421700A18468 /* PBXContainerItemProxy */ = {
......@@ -520,6 +520,9 @@
4B5A1BBD0CD1CC110005BF74 /* midiseq.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = midiseq.c; path = "../example-clients/midiseq.c"; sourceTree = SOURCE_ROOT; };
4B5A1BDA0CD1CCE10005BF74 /* jack_midisine */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midisine; sourceTree = BUILT_PRODUCTS_DIR; };
4B5A1BDC0CD1CD420005BF74 /* midisine.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = midisine.c; path = "../example-clients/midisine.c"; sourceTree = SOURCE_ROOT; };
4B5A1D3C0CD1F4990005BF74 /* FadeConnect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = FadeConnect.cpp; path = "../example-clients/FadeConnect.cpp"; sourceTree = SOURCE_ROOT; };
4B5A1D3D0CD1F4990005BF74 /* FadeConnect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FadeConnect.h; path = "../example-clients/FadeConnect.h"; sourceTree = SOURCE_ROOT; };
4B5A1D700CD1F63F0005BF74 /* fade_connect.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = fade_connect.cpp; path = "../example-clients/fade_connect.cpp"; sourceTree = SOURCE_ROOT; };
4B60CE480AAABA31004956AA /* connect.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = connect.c; path = "../example-clients/connect.c"; sourceTree = SOURCE_ROOT; };
4B66A8580934964500A89560 /* JackConstants.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackConstants.h; path = ../common/JackConstants.h; sourceTree = SOURCE_ROOT; };
4B699BB1097D421600A18468 /* jackdmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jackdmp; sourceTree = BUILT_PRODUCTS_DIR; };
......@@ -959,6 +962,9 @@
4B03383E0797E19900686131 /* Simple clients */ = {
isa = PBXGroup;
children = (
4B5A1D700CD1F63F0005BF74 /* fade_connect.cpp */,
4B5A1D3C0CD1F4990005BF74 /* FadeConnect.cpp */,
4B5A1D3D0CD1F4990005BF74 /* FadeConnect.h */,
4B5A1BDC0CD1CD420005BF74 /* midisine.c */,
4B5A1BBD0CD1CC110005BF74 /* midiseq.c */,
4BA692D60CBE4CC600EAD520 /* ipunload.c */,
......
......@@ -480,7 +480,7 @@ int main (int argc, char *argv[])
const char *options = "kRnqvt:";
float ratio; // for speed calculation in freewheel mode
jack_options_t jack_options = JackNullOption;
struct option long_options[] = {
struct option long_options[] = {
{"realtime", 0, 0, 'R'},
{"non-realtime", 0, 0, 'n'},
{"time", 0, 0, 't'},
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment