Browse Source

Implement server temporary (-T) mode.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1529 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.65
sletz 17 years ago
parent
commit
b1925e9e6f
9 changed files with 44 additions and 17 deletions
  1. +4
    -0
      ChangeLog
  2. +25
    -5
      common/JackEngine.cpp
  3. +2
    -1
      common/JackEngine.h
  4. +3
    -1
      common/JackEngineControl.h
  5. +2
    -2
      common/JackServer.cpp
  6. +1
    -1
      common/JackServer.h
  7. +3
    -3
      common/JackServerGlobals.cpp
  8. +1
    -1
      common/JackServerGlobals.h
  9. +3
    -3
      common/Jackdmp.cpp

+ 4
- 0
ChangeLog View File

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

2007-08-24 Stephane Letz <letz@grame.fr>
* Implement server temporary (-T) mode.
2007-08-23 Stephane Letz <letz@grame.fr>


+ 25
- 5
common/JackEngine.cpp View File

@@ -93,7 +93,7 @@ int JackEngine::Close()
return 0;
}

int JackEngine::Allocate()
int JackEngine::AllocateRefnum()
{
for (int i = 0; i < CLIENT_NUM; i++) {
if (!fClientTable[i]) {
@@ -101,10 +101,30 @@ int JackEngine::Allocate()
return i;
}
}

return -1;
}

void JackEngine::ReleaseRefnum(int ref)
{
fClientTable[ref] = NULL;
int i;
if (fEngineControl->fTemporary) {
for (i = REAL_REFNUM; i < CLIENT_NUM; i++) {
if (fClientTable[i])
break;
}
if (i == CLIENT_NUM) {
// last client and temporay case: quit the server
JackLog("JackEngine::ReleaseRefnum server quit\n");
fEngineControl->fTemporary = false;
#ifndef WIN32
kill(getpid(), SIGINT);
#endif
}
}
}

//------------------
// Graph management
//------------------
@@ -424,7 +444,7 @@ int JackEngine::ClientExternalOpen(const char* name, int* ref, int* shared_engin
{
JackLog("JackEngine::ClientOpen: name = %s \n", name);
int refnum = Allocate();
int refnum = AllocateRefnum();
if (refnum < 0) {
jack_error("No more refnum available");
return -1;
@@ -473,7 +493,7 @@ int JackEngine::ClientInternalOpen(const char* name, int* ref, JackEngineControl
{
JackLog("JackEngine::ClientInternalNew: name = %s\n", name);
int refnum = Allocate();
int refnum = AllocateRefnum();
if (refnum < 0) {
jack_error("No more refnum available");
return -1;
@@ -534,7 +554,7 @@ int JackEngine::ClientCloseAux(int refnum, JackClientInterface* client, bool wai
(client->GetClientControl()) ? client->GetClientControl()->fName : "No name");

// Remove the client from the table
fClientTable[refnum] = NULL;
ReleaseRefnum(refnum);

// Remove ports
fGraphManager->RemoveAllPorts(refnum);


+ 2
- 1
common/JackEngine.h View File

@@ -63,7 +63,8 @@ class JackEngine
void ProcessCurrent(jack_time_t callback_usecs);
bool ClientCheckName(const char* name);
bool GenerateUniqueName(char* name);
int Allocate();
int AllocateRefnum();
void ReleaseRefnum(int ref);

public:



+ 3
- 1
common/JackEngineControl.h View File

@@ -39,6 +39,7 @@ struct JackEngineControl : public JackShmMem
jack_nframes_t fSampleRate;
float fCPULoad;
bool fSyncMode;
bool fTemporary;
jack_time_t fPeriodUsecs;
jack_time_t fTimeOutUsecs;
bool fRealTime;
@@ -50,8 +51,9 @@ struct JackEngineControl : public JackShmMem
JackTransportEngine fTransport;
bool fVerbose;
JackEngineControl(bool sync, long timeout, bool rt, long priority, bool verbose)
JackEngineControl(bool sync, bool temporary, long timeout, bool rt, long priority, bool verbose)
:fSyncMode(sync),
fTemporary(temporary),
fTimeOutUsecs(timeout * 1000),
fRealTime(rt),
fPriority(priority),


+ 2
- 2
common/JackServer.cpp View File

@@ -45,13 +45,13 @@ namespace Jack

JackServer* JackServer::fInstance = NULL;

JackServer::JackServer(bool sync, long timeout, bool rt, long priority, long loopback, bool verbose)
JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, long loopback, bool verbose)
{
JackGlobals::InitServer();
for (int i = 0; i < CLIENT_NUM; i++)
fSynchroTable[i] = JackGlobals::MakeSynchro();
fGraphManager = new JackGraphManager();
fEngineControl = new JackEngineControl(sync, timeout, rt, priority, verbose);
fEngineControl = new JackEngineControl(sync, temporary, timeout, rt, priority, verbose);
fEngine = new JackEngine(fGraphManager, fSynchroTable, fEngineControl);
fFreewheelDriver = new JackThreadedDriver(new JackFreewheelDriver("freewheel", fEngine, fSynchroTable));
fLoopbackDriver = new JackLoopbackDriver("loopback", fEngine, fSynchroTable);


+ 1
- 1
common/JackServer.h View File

@@ -61,7 +61,7 @@ class EXPORT JackServer

public:

JackServer(bool sync, long timeout, bool rt, long priority, long loopback, bool verbose);
JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, long loopback, bool verbose);
virtual ~JackServer();

int Open(jack_driver_desc_t* driver_desc, JSList* driver_params);


+ 3
- 3
common/JackServerGlobals.cpp View File

@@ -155,10 +155,10 @@ jack_cleanup_files (const char *server_name)

#endif

int JackServerGlobals::JackStart(jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int time_out_ms, int rt, int priority, int loopback, int verbose)
int JackServerGlobals::JackStart(jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int temporary, int time_out_ms, int rt, int priority, int loopback, int verbose)
{
JackLog("Jackdmp: sync = %ld timeout = %ld rt = %ld priority = %ld verbose = %ld \n", sync, time_out_ms, rt, priority, verbose);
fServer = new JackServer(sync, time_out_ms, rt, priority, loopback, verbose);
fServer = new JackServer(sync, temporary, time_out_ms, rt, priority, loopback, verbose);
int res = fServer->Open(driver_desc, driver_params);
return (res < 0) ? res : fServer->Start();
}
@@ -351,7 +351,7 @@ JackServerGlobals::JackServerGlobals()
if (!realtime && client_timeout == 0)
client_timeout = 500; /* 0.5 sec; usable when non realtime. */

int res = JackStart(driver_desc, driver_params, sync, client_timeout, realtime, realtime_priority, loopback, verbose_aux);
int res = JackStart(driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, loopback, verbose_aux);
if (res < 0) {
jack_error("Cannot start server... exit");
JackDelete();


+ 1
- 1
common/JackServerGlobals.h View File

@@ -47,7 +47,7 @@ struct JackServerGlobals

static void Init();
static void Destroy();
static int JackStart(jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int time_out_ms, int rt, int priority, int loopback, int verbose);
static int JackStart(jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int temporary, int time_out_ms, int rt, int priority, int loopback, int verbose);
static int JackStop();
static int JackDelete();
};


+ 3
- 3
common/Jackdmp.cpp View File

@@ -101,10 +101,10 @@ static void DoNothingHandler(int sig)
write(1, buf, strlen(buf));
}

static int JackStart(jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int time_out_ms, int rt, int priority, int loopback, int verbose)
static int JackStart(jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int temporary, int time_out_ms, int rt, int priority, int loopback, int verbose)
{
JackLog("Jackdmp: sync = %ld timeout = %ld rt = %ld priority = %ld verbose = %ld \n", sync, time_out_ms, rt, priority, verbose);
fServer = new JackServer(sync, time_out_ms, rt, priority, loopback, verbose);
fServer = new JackServer(sync, temporary, time_out_ms, rt, priority, loopback, verbose);
int res = fServer->Open(driver_desc, driver_params);
return (res < 0) ? res : fServer->Start();
}
@@ -448,7 +448,7 @@ int main(int argc, char* argv[])
if (!realtime && client_timeout == 0)
client_timeout = 500; /* 0.5 sec; usable when non realtime. */

int res = JackStart(driver_desc, driver_params, sync, client_timeout, realtime, realtime_priority, loopback, jack_verbose);
int res = JackStart(driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, loopback, jack_verbose);
if (res < 0) {
jack_error("Cannot start server... exit");
JackDelete();


Loading…
Cancel
Save