diff options
author | sletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2007-10-24 10:44:15 +0000 |
---|---|---|
committer | sletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2007-10-24 10:44:15 +0000 |
commit | f16634bb6d591b6c82fd5a1b4e6f05ca9a060d4d (patch) | |
tree | 62291920fe8bdad13ed96909713be3bb4631367b | |
parent | 0daaace1454c5bf2cd80a61be275a27f57e7de17 (diff) | |
download | jack2-f16634bb6d591b6c82fd5a1b4e6f05ca9a060d4d.tar.gz |
Implementation of server_name setting (-n) in progress
git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1638 0c269be4-1314-0410-8aa9-9f06e86f4224
56 files changed, 297 insertions, 339 deletions
@@ -13,6 +13,10 @@ Tom Szilagyi Jackdmp changes log
--------------------------- +2007-10-24 Stephane Letz <letz@grame.fr> + + * Implementation of server_name setting (-n) in progress.
+ 2007-10-23 Stephane Letz <letz@grame.fr> * Correct jack_acquire_real_time_scheduling on OSX.
diff --git a/common/JackAPI.cpp b/common/JackAPI.cpp index f83dd56a..c85c1a8d 100644 --- a/common/JackAPI.cpp +++ b/common/JackAPI.cpp @@ -53,10 +53,8 @@ extern "C" EXPORT int jack_internal_client_new (const char *client_name, const char *load_name, const char *load_init); - EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name); EXPORT void jack_internal_client_close (const char *client_name); - EXPORT void my_jack_internal_client_close (jack_client_t* client); - EXPORT int jack_is_realtime (jack_client_t *client); + EXPORT int jack_is_realtime (jack_client_t *client); EXPORT void jack_on_shutdown (jack_client_t *client, void (*function)(void *arg), void *arg); EXPORT int jack_set_process_callback (jack_client_t *client, diff --git a/common/JackAPIWrapper.cpp b/common/JackAPIWrapper.cpp index fe1e2732..62e7f106 100644 --- a/common/JackAPIWrapper.cpp +++ b/common/JackAPIWrapper.cpp @@ -36,9 +36,7 @@ extern "C" EXPORT int jack_internal_client_new (const char *client_name, const char *load_name, const char *load_init); - EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name, const char* dll_name, const char* object_data); EXPORT void jack_internal_client_close (const char *client_name); - EXPORT void my_jack_internal_client_close (jack_client_t* client); EXPORT int jack_is_realtime (jack_client_t *client); EXPORT void jack_on_shutdown (jack_client_t *client, void (*function)(void *arg), void *arg); diff --git a/common/JackChannel.h b/common/JackChannel.h index 658322e9..df1414e2 100644 --- a/common/JackChannel.h +++ b/common/JackChannel.h @@ -48,7 +48,7 @@ class JackClientChannelInterface {} // Open the Server/Client connection - virtual int Open(const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) + virtual int Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) { return 0; } @@ -170,7 +170,7 @@ class JackServerChannelInterface {} // Open the Server/Client connection - virtual int Open(JackServer* server) + virtual int Open(const char* server_name, JackServer* server) { return 0; } @@ -194,7 +194,7 @@ class JackServerNotifyChannelInterface {} // Open the Server RT/Server connection - virtual int Open() + virtual int Open(const char* server_name) { return 0; } diff --git a/common/JackClient.h b/common/JackClient.h index e453996e..5c248f96 100644 --- a/common/JackClient.h +++ b/common/JackClient.h @@ -76,6 +76,7 @@ class JackClient : public JackClientInterface, public JackRunnableInterface void* fTimebaseArg; void* fSyncArg; int fConditionnal; + char fServerName[64]; JackThread* fThread; /*! Thread to execute the Process function */ JackClientChannelInterface* fChannel; @@ -99,7 +100,7 @@ class JackClient : public JackClientInterface, public JackRunnableInterface JackClient(JackSynchro** table); virtual ~JackClient(); - virtual int Open(const char* name, jack_options_t options, jack_status_t* status) = 0; + virtual int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) = 0; virtual int Close(); virtual JackGraphManager* GetGraphManager() const = 0; diff --git a/common/JackDebugClient.cpp b/common/JackDebugClient.cpp index a8ec5cdd..077d6d50 100644 --- a/common/JackDebugClient.cpp +++ b/common/JackDebugClient.cpp @@ -74,9 +74,9 @@ JackDebugClient::~JackDebugClient() delete fClient; } -int JackDebugClient::Open(const char* name, jack_options_t options, jack_status_t* status) +int JackDebugClient::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) { - int res = fClient->Open(name, options, status); + int res = fClient->Open(server_name, name, options, status); char provstr[256]; char buffer[256]; time_t curtime; diff --git a/common/JackDebugClient.h b/common/JackDebugClient.h index b9b0cfa0..d92b8d3e 100644 --- a/common/JackDebugClient.h +++ b/common/JackDebugClient.h @@ -67,7 +67,7 @@ class JackDebugClient : public JackClient JackDebugClient(JackClient* fTheClient); virtual ~JackDebugClient(); - virtual int Open(const char* name, jack_options_t options, jack_status_t* status); + virtual int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); int Close(); virtual JackGraphManager* GetGraphManager() const; diff --git a/common/JackEngine.cpp b/common/JackEngine.cpp index 1d8ea743..8e82c3bf 100644 --- a/common/JackEngine.cpp +++ b/common/JackEngine.cpp @@ -67,7 +67,7 @@ int JackEngine::Open() JackLog("JackEngine::Open\n"); // Open audio thread => request thread communication channel - if (fChannel->Open() < 0) { + if (fChannel->Open(fEngineControl->fServerName) < 0) { jack_error("Cannot connect to server"); return -1; } else { @@ -515,7 +515,7 @@ int JackEngine::ClientExternalOpen(const char* name, int* ref, int* shared_engin JackExternalClient* client = new JackExternalClient(); - if (!fSynchroTable[refnum]->Allocate(name, 0)) { + if (!fSynchroTable[refnum]->Allocate(name, fEngineControl->fServerName, 0)) { jack_error("Cannot allocate synchro"); goto error; } @@ -562,7 +562,7 @@ int JackEngine::ClientInternalOpen(const char* name, int* ref, JackEngineControl return -1; } - if (!fSynchroTable[refnum]->Allocate(name, 0)) { + if (!fSynchroTable[refnum]->Allocate(name, fEngineControl->fServerName, 0)) { jack_error("Cannot allocate synchro"); return -1; } diff --git a/common/JackEngineControl.h b/common/JackEngineControl.h index 3f4b2346..dd12f922 100644 --- a/common/JackEngineControl.h +++ b/common/JackEngineControl.h @@ -47,18 +47,22 @@ struct JackEngineControl : public JackShmMem UInt64 fPeriod; UInt64 fComputation; UInt64 fConstraint; + char fServerName[64]; JackFrameTimer fFrameTimer; JackTransportEngine fTransport; bool fVerbose; - JackEngineControl(bool sync, bool temporary, long timeout, bool rt, long priority, bool verbose) + JackEngineControl(bool sync, bool temporary, long timeout, bool rt, long priority, bool verbose, const char* server_name) :fSyncMode(sync), fTemporary(temporary), fTimeOutUsecs(timeout * 1000), fRealTime(rt), fPriority(priority), fVerbose(verbose) - {} + + { + snprintf(fServerName, sizeof(fServerName), server_name); + } void InitFrameTime() { diff --git a/common/JackFifo.cpp b/common/JackFifo.cpp index d2c1dc75..e8c42d41 100755 --- a/common/JackFifo.cpp +++ b/common/JackFifo.cpp @@ -29,9 +29,9 @@ This program is free software; you can redistribute it and/or modify namespace Jack { -void JackFifo::BuildName(const char* name, char* res) +void JackFifo::BuildName(const char* name, const char* server_name, char* res) { - sprintf(res, "%s/jack_fifo.%s", jack_client_dir, name); + sprintf(res, "%s/jack_fifo.%s_%s", jack_client_dir, server_name, name); } bool JackFifo::Signal() @@ -103,10 +103,10 @@ bool JackFifo::TimedWait(long usec) #endif // Server side -bool JackFifo::Allocate(const char* name, int value) +bool JackFifo::Allocate(const char* name, const char* server_name, int value) { struct stat statbuf; - BuildName(name, fName); + BuildName(name, server_name, fName); JackLog("JackFifo::Allocate name = %s\n", fName); @@ -138,9 +138,9 @@ bool JackFifo::Allocate(const char* name, int value) } // Client side -bool JackFifo::ConnectAux(const char* name, int access) +bool JackFifo::ConnectAux(const char* name, const char* server_name, int access) { - BuildName(name, fName); + BuildName(name, server_name, fName); JackLog("JackFifo::ConnectAux name = %s\n", fName); // Temporary... @@ -159,19 +159,19 @@ bool JackFifo::ConnectAux(const char* name, int access) } } -bool JackFifo::Connect(const char* name) +bool JackFifo::Connect(const char* name, const char* server_name) { - return ConnectAux(name, O_RDWR); + return ConnectAux(name, server_name, O_RDWR); } -bool JackFifo::ConnectOutput(const char* name) +bool JackFifo::ConnectOutput(const char* name, const char* server_name) { - return ConnectAux(name, O_WRONLY | O_NONBLOCK); + return ConnectAux(name, server_name, O_WRONLY | O_NONBLOCK); } -bool JackFifo::ConnectInput(const char* name) +bool JackFifo::ConnectInput(const char* name, const char* server_name) { - return ConnectAux(name, O_RDONLY); + return ConnectAux(name, server_name, O_RDONLY); } bool JackFifo::Disconnect() diff --git a/common/JackFifo.h b/common/JackFifo.h index e91d212a..99ccb390 100755 --- a/common/JackFifo.h +++ b/common/JackFifo.h @@ -40,11 +40,11 @@ class JackFifo : public JackSynchro int fFifo; pollfd fPoll; - bool ConnectAux(const char* name, int access); + bool ConnectAux(const char* name, const char* server_name, int access); protected: - void BuildName(const char* name, char* res); + void BuildName(const char* name, const char* server_name, char* res); public: @@ -58,10 +58,10 @@ class JackFifo : public JackSynchro bool Wait(); bool TimedWait(long usec); - bool Allocate(const char* name, int value); - bool Connect(const char* name); - bool ConnectInput(const char* name); - bool ConnectOutput(const char* name); + bool Allocate(const char* name, const char* server_name, int value); + bool Connect(const char* name, const char* server_name); + bool ConnectInput(const char* name, const char* server_name); + bool ConnectOutput(const char* name, const char* server_name); bool Disconnect(); void Destroy(); }; diff --git a/common/JackInternalClient.cpp b/common/JackInternalClient.cpp index 76efddcb..f1ae6608 100644 --- a/common/JackInternalClient.cpp +++ b/common/JackInternalClient.cpp @@ -65,11 +65,13 @@ JackInternalClient::~JackInternalClient() delete fChannel; } -int JackInternalClient::Open(const char* name, jack_options_t options, jack_status_t* status) +int JackInternalClient::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) { int result; char name_res[JACK_CLIENT_NAME_SIZE]; JackLog("JackInternalClient::Open name = %s\n", name); + + snprintf(fServerName, sizeof(fServerName), server_name); fChannel->ClientCheck(name, name_res, JACK_PROTOCOL_VERSION, (int)options, (int*)status, &result); if (result < 0) { @@ -154,9 +156,9 @@ JackLoadableInternalClient::~JackLoadableInternalClient() UnloadJackModule(fHandle); } -int JackLoadableInternalClient::Open(const char* name, jack_options_t options, jack_status_t* status) +int JackLoadableInternalClient::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) { - int res = JackInternalClient::Open(name, options, status); + int res = JackInternalClient::Open(server_name, name, options, status); if (res == 0) fInitialize((jack_client_t*)this, fObjectData); return res; diff --git a/common/JackInternalClient.h b/common/JackInternalClient.h index a5ed2af4..f57772ce 100644 --- a/common/JackInternalClient.h +++ b/common/JackInternalClient.h @@ -45,7 +45,7 @@ class JackInternalClient : public JackClient JackInternalClient(JackServer* server, JackSynchro** table); virtual ~JackInternalClient(); - int Open(const char* name, jack_options_t options, jack_status_t* status); + int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); JackGraphManager* GetGraphManager() const; JackEngineControl* GetEngineControl() const; @@ -95,7 +95,7 @@ class JackLoadableInternalClient : public JackInternalClient JackLoadableInternalClient(JackServer* server, JackSynchro** table, const char* so_name, const char* object_data); virtual ~JackLoadableInternalClient(); - int Open(const char* name, jack_options_t options, jack_status_t* status); + int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); }; diff --git a/common/JackLibAPI.cpp b/common/JackLibAPI.cpp index f6934e7a..be812862 100644 --- a/common/JackLibAPI.cpp +++ b/common/JackLibAPI.cpp @@ -77,7 +77,7 @@ static jack_client_t* jack_client_open_aux(const char* client_name, jack_options va_start(ap, status); jack_varargs_parse(options, ap, &va); va_end(ap); - + JackLog("jack_client_open %s\n", client_name); if (client_name == NULL) { jack_error("jack_client_new called with a NULL client_name"); @@ -100,7 +100,7 @@ static jack_client_t* jack_client_open_aux(const char* client_name, jack_options JackClient* client = new JackLibClient(GetSynchroTable()); #endif - int res = client->Open(client_name, options, status); + int res = client->Open(va.server_name, client_name, options, status); if (res < 0) { delete client; JackLibGlobals::Destroy(); // jack library destruction diff --git a/common/JackLibClient.cpp b/common/JackLibClient.cpp index 37b8f278..270ecdfa 100644 --- a/common/JackLibClient.cpp +++ b/common/JackLibClient.cpp @@ -61,14 +61,16 @@ JackLibClient::~JackLibClient() delete fChannel; } -int JackLibClient::Open(const char* name, jack_options_t options, jack_status_t* status) +int JackLibClient::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) { int shared_engine, shared_client, shared_graph, result; JackLog("JackLibClient::Open %s\n", name); + snprintf(fServerName, sizeof(fServerName), server_name); + // Open server/client channel char name_res[JACK_CLIENT_NAME_SIZE]; - if (fChannel->Open(name, name_res, this, options, status) < 0) { + if (fChannel->Open(server_name, name, name_res, this, options, status) < 0) { jack_error("Cannot connect to the server"); goto error; } @@ -88,9 +90,9 @@ int JackLibClient::Open(const char* name, jack_options_t options, jack_status_t* try { // Map shared memory segments - JackLibGlobals::fGlobals->fEngineControl = shared_engine; - JackLibGlobals::fGlobals->fGraphManager = shared_graph; - fClientControl = shared_client; + JackLibGlobals::fGlobals->fEngineControl.SetShmIndex(shared_engine, fServerName); + JackLibGlobals::fGlobals->fGraphManager.SetShmIndex(shared_graph, fServerName); + fClientControl.SetShmIndex(shared_client, fServerName); jack_verbose = GetEngineControl()->fVerbose; } catch (int n) { jack_error("Map shared memory segments exception %d", n); @@ -109,7 +111,7 @@ int JackLibClient::Open(const char* name, jack_options_t options, jack_status_t* #endif */ // Connect shared synchro : the synchro must be usable in I/O mode when several clients live in the same process - if (!fSynchroTable[fClientControl->fRefNum]->Connect(name_res)) { + if (!fSynchroTable[fClientControl->fRefNum]->Connect(name_res, fServerName)) { jack_error("Cannot ConnectSemaphore %s client", name_res); goto error; } @@ -135,8 +137,8 @@ int JackLibClient::ClientNotifyImp(int refnum, const char* name, int notify, int case kAddClient: JackLog("JackClient::AddClient name = %s, ref = %ld \n", name, refnum); - // the synchro must be usable in I/O mode when several clients live in the same process - res = fSynchroTable[refnum]->Connect(name) ? 0 : -1; + // the synchro must be usable in I/O mode when several clients live in the same process + res = fSynchroTable[refnum]->Connect(name, fServerName) ? 0 : -1; break; case kRemoveClient: diff --git a/common/JackLibClient.h b/common/JackLibClient.h index 044cb770..82fb5d8a 100644 --- a/common/JackLibClient.h +++ b/common/JackLibClient.h @@ -44,7 +44,7 @@ class JackLibClient : public JackClient JackLibClient(JackSynchro** table); virtual ~JackLibClient(); - int Open(const char* name, jack_options_t options, jack_status_t* status); + int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); int ClientNotifyImp(int refnum, const char* name, int notify, int sync, int value); diff --git a/common/JackPosixSemaphore.cpp b/common/JackPosixSemaphore.cpp index 18e7a0f5..85b3541f 100644 --- a/common/JackPosixSemaphore.cpp +++ b/common/JackPosixSemaphore.cpp @@ -26,9 +26,9 @@ This program is free software; you can redistribute it and/or modify namespace Jack { -void JackPosixSemaphore::BuildName(const char* name, char* res) +void JackPosixSemaphore::BuildName(const char* name, const char* server_name, char* res) { - sprintf(res, "%s/jack_sem.%s", jack_client_dir, name); + sprintf(res, "%s/jack_sem.%s_%s", jack_client_dir, server_name, name); } bool JackPosixSemaphore::Signal() @@ -123,9 +123,9 @@ bool JackPosixSemaphore::TimedWait(long usec) } // Server side : publish the semaphore in the global namespace -bool JackPosixSemaphore::Allocate(const char* name, int value) +bool JackPosixSemaphore::Allocate(const char* name, const char* server_name, int value) { - BuildName(name, fName); + BuildName(name, server_name, fName); JackLog("JackPosixSemaphore::Allocate name = %s val = %ld\n", fName, value); if ((fSemaphore = sem_open(fName, O_CREAT, 0777, value)) == (sem_t*)SEM_FAILED) { @@ -137,9 +137,9 @@ bool JackPosixSemaphore::Allocate(const char* name, int value) } // Client side : get the published semaphore from server -bool JackPosixSemaphore::ConnectInput(const char* name) +bool JackPosixSemaphore::ConnectInput(const char* name, const char* server_name) { - BuildName(name, fName); + BuildName(name, server_name, fName); JackLog("JackPosixSemaphore::Connect %s\n", fName); // Temporary... @@ -159,14 +159,14 @@ bool JackPosixSemaphore::ConnectInput(const char* name) } } -bool JackPosixSemaphore::Connect(const char* name) +bool JackPosixSemaphore::Connect(const char* name, const char* server_name) { - return ConnectInput(name); + return ConnectInput(name, server_name); } -bool JackPosixSemaphore::ConnectOutput(const char* name) +bool JackPosixSemaphore::ConnectOutput(const char* name, const char* server_name) { - return ConnectInput(name); + return ConnectInput(name, server_name); } bool JackPosixSemaphore::Disconnect() diff --git a/common/JackPosixSemaphore.h b/common/JackPosixSemaphore.h index dadfcc91..fe5fd354 100644 --- a/common/JackPosixSemaphore.h +++ b/common/JackPosixSemaphore.h @@ -42,7 +42,7 @@ class JackPosixSemaphore : public JackSynchro protected: - void BuildName(const char* name, char* res); + void BuildName(const char* name, const char* server_name, char* res); public: @@ -56,10 +56,10 @@ class JackPosixSemaphore : public JackSynchro bool Wait(); bool TimedWait(long usec); - bool Allocate(const char* name, int value); - bool Connect(const char* name); - bool ConnectInput(const char* name); - bool ConnectOutput(const char* name); + bool Allocate(const char* name, const char* server_name, int value); + bool Connect(const char* name, const char* server_name); + bool ConnectInput(const char* name, const char* server_name); + bool ConnectOutput(const char* name, const char* server_name); bool Disconnect(); void Destroy(); }; diff --git a/common/JackProcessSync.h b/common/JackProcessSync.h index c8ddd99e..3a53bedb 100644 --- a/common/JackProcessSync.h +++ b/common/JackProcessSync.h @@ -137,7 +137,7 @@ class JackInterProcessSync : public JackSyncInterface bool Allocate(const char* name) { - return fSynchro->Allocate(name, 0); + return fSynchro->Allocate(name, "", 0); } void Destroy() @@ -147,7 +147,7 @@ class JackInterProcessSync : public JackSyncInterface bool Connect(const char* name) { - return fSynchro->Connect(name); + return fSynchro->Connect(name, ""); } bool TimedWait(long usec) diff --git a/common/JackServer.cpp b/common/JackServer.cpp index 09c86397..1a116cf7 100644 --- a/common/JackServer.cpp +++ b/common/JackServer.cpp @@ -46,13 +46,13 @@ namespace Jack JackServer* JackServer::fInstance = NULL; -JackServer::JackServer(bool sync, bool temporary, 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, const char* server_name) { JackGlobals::InitServer(); for (int i = 0; i < CLIENT_NUM; i++) fSynchroTable[i] = JackGlobals::MakeSynchro(); fGraphManager = new JackGraphManager(); - fEngineControl = new JackEngineControl(sync, temporary, timeout, rt, priority, verbose); + fEngineControl = new JackEngineControl(sync, temporary, timeout, rt, priority, verbose, server_name); fEngine = new JackEngine(fGraphManager, fSynchroTable, fEngineControl); fFreewheelDriver = new JackThreadedDriver(new JackFreewheelDriver("freewheel", fEngine, fSynchroTable)); fLoopbackDriver = new JackLoopbackDriver("loopback", fEngine, fSynchroTable); @@ -89,7 +89,7 @@ JackServer::~JackServer() int JackServer::Open(jack_driver_desc_t* driver_desc, JSList* driver_params) { - if (fChannel->Open(this) < 0) { + if (fChannel->Open(fEngineControl->fServerName, this) < 0) { jack_error("Server channel open error"); return -1; } @@ -179,7 +179,7 @@ int JackServer::InternalClientLoad(const char* client_name, const char* so_name, *status = 0; JackLoadableInternalClient* client = new JackLoadableInternalClient(fInstance, GetSynchroTable(), so_name, objet_data); assert(client); - int res = client->Open(client_name, (jack_options_t)options, (jack_status_t*)status); + int res = client->Open("unused", client_name, (jack_options_t)options, (jack_status_t*)status); if (res < 0) { delete client; *int_ref = 0; diff --git a/common/JackServer.h b/common/JackServer.h index d2034d63..4cf5e64a 100644 --- a/common/JackServer.h +++ b/common/JackServer.h @@ -61,7 +61,7 @@ class EXPORT JackServer public: - JackServer(bool sync, bool temporary, 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, const char* server_name); virtual ~JackServer(); int Open(jack_driver_desc_t* driver_desc, JSList* driver_params); diff --git a/common/JackServerAPI.cpp b/common/JackServerAPI.cpp index 355bec5a..2fe6f785 100644 --- a/common/JackServerAPI.cpp +++ b/common/JackServerAPI.cpp @@ -41,9 +41,6 @@ extern "C" { #endif - EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name, const char* dll_name, const char* object_data); - EXPORT void my_jack_internal_client_close(jack_client_t* ext_client); - EXPORT jack_client_t * jack_client_open (const char *client_name, jack_options_t options, jack_status_t *status, ...); @@ -56,51 +53,6 @@ extern "C" using namespace Jack; -EXPORT jack_client_t* my_jack_internal_client_new(const char* client_name, const char* dll_name, const char* object_data) -{ - jack_status_t my_status = (jack_status_t)0; - - JackLog("jack_internal_client_new %s", client_name); - if (client_name == NULL) { - jack_error("jack_internal_client_new called with a NULL client_name"); - return NULL; - } - - JackClient* client; - - try { - #ifdef __CLIENTDEBUG__ - client = new JackDebugClient(new JackLoadableInternalClient(JackServer::fInstance, GetSynchroTable(), dll_name, object_data)); // Debug mode - #else - client = new JackLoadableInternalClient(JackServer::fInstance, GetSynchroTable(), dll_name, object_data); // To improve... - #endif - } catch (...) { // Allocation or dynamic code loading failure - return NULL; - } - - jack_options_t options = JackUseExactName; - int res = client->Open(client_name, options, &my_status); - if (res < 0) { - delete client; - return NULL; - } else { - return (jack_client_t*)client; - } -} - -EXPORT void my_jack_internal_client_close(jack_client_t* ext_client) -{ - JackLog("jack_internal_client_close"); - JackClient* client = (JackClient*)ext_client; - if (client == NULL) { - jack_error("jack_internal_client_close called with a NULL client"); - } else { - client->Close(); - delete client; - JackLog("jack_internal_client_close OK"); - } -} - EXPORT jack_client_t* jack_client_new(const char* client_name) { int options = JackUseExactName; @@ -150,7 +102,7 @@ EXPORT jack_client_t* jack_client_open(const char* client_name, jack_options_t o JackClient* client = new JackInternalClient(JackServer::fInstance, GetSynchroTable()); // To improve... #endif - int res = client->Open(client_name, options, status); + int res = client->Open(va.server_name, client_name, options, status); if (res < 0) { delete client; JackServerGlobals::Destroy(); // jack server destruction diff --git a/common/JackServerGlobals.cpp b/common/JackServerGlobals.cpp index ffca9646..3dd8ff75 100644 --- a/common/JackServerGlobals.cpp +++ b/common/JackServerGlobals.cpp @@ -46,7 +46,7 @@ static char* jack_default_server_name(void) { char* server_name; if ((server_name = getenv("JACK_DEFAULT_SERVER")) == NULL) - server_name = "jackdmp_default"; + server_name = "default"; return server_name; } @@ -141,10 +141,10 @@ jack_cleanup_files(const char *server_name) #endif -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) +int JackServerGlobals::JackStart(const char* server_name, 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, temporary, time_out_ms, rt, priority, loopback, verbose); + fServer = new JackServer(sync, temporary, time_out_ms, rt, priority, loopback, verbose, server_name); int res = fServer->Open(driver_desc, driver_params); return (res < 0) ? res : fServer->Start(); } @@ -384,7 +384,7 @@ bool JackServerGlobals::Init() free(argv[i]); } - int res = JackStart(driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, loopback, verbose_aux); + int res = JackStart(server_name, driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, loopback, verbose_aux); if (res < 0) { jack_error("Cannot start server... exit"); JackDelete(); diff --git a/common/JackServerGlobals.h b/common/JackServerGlobals.h index 9761d378..b4d7cdf5 100644 --- a/common/JackServerGlobals.h +++ b/common/JackServerGlobals.h @@ -46,7 +46,16 @@ struct JackServerGlobals static bool Init(); static void Destroy(); - 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 JackStart(const char* server_name, + 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(); }; diff --git a/common/JackShmMem.cpp b/common/JackShmMem.cpp index 7d7230fb..a73a8ad3 100644 --- a/common/JackShmMem.cpp +++ b/common/JackShmMem.cpp @@ -26,8 +26,6 @@ namespace Jack { unsigned long JackShmMem::fSegmentNum = 0; -unsigned long JackShmMem::fSegmentCount = 0; - jack_shm_info_t JackShmMem::gInfo; size_t JackMem::gSize = 0; @@ -39,14 +37,6 @@ void* JackShmMem::operator new(size_t size) snprintf(name, sizeof(name), "/jack_shared%ld", JackShmMem::fSegmentNum++); - if (JackShmMem::fSegmentCount++ == 0) { - JackLog("jack_initialize_shm\n"); - if (jack_initialize_shm_server() < 0) { - jack_error("cannot initialize shm", strerror(errno)); - goto error; - } - } - if (jack_shmalloc(name, size, &info)) { jack_error("cannot create shared memory segment of size = %d", size, strerror(errno)); goto error; @@ -84,11 +74,6 @@ void JackShmMem::operator delete(void* p, size_t size) jack_release_shm(&info); jack_destroy_shm(&info); - - if (--JackShmMem::fSegmentCount == 0) { - JackLog("jack_cleanup_shm\n"); - jack_cleanup_shm(); - } } void LockMemoryImp(void* ptr, size_t size) diff --git a/common/JackShmMem.h b/common/JackShmMem.h index 128fcbf0..90ac760a 100644 --- a/common/JackShmMem.h +++ b/common/JackShmMem.h @@ -100,7 +100,6 @@ class JackShmMem jack_shm_info_t fInfo; static unsigned long fSegmentNum; - static unsigned long fSegmentCount; static jack_shm_info_t gInfo; public: @@ -152,11 +151,11 @@ class JackShmReadWritePtr jack_shm_info_t fInfo; - void Init(int index) + void Init(int index, const char* server_name = "default") { if (fInfo.index < 0 && index >= 0) { JackLog("JackShmReadWritePtr::Init %ld %ld\n", index, fInfo.index); - if (jack_initialize_shm_client() < 0) + if (jack_initialize_shm(server_name) < 0) throw - 1; fInfo.index = index; if (jack_attach_shm(&fInfo)) { @@ -174,9 +173,9 @@ class JackShmReadWritePtr fInfo.attached_at = NULL; } - JackShmReadWritePtr(int index) + JackShmReadWritePtr(int index, const char* server_name) { - Init(index); + Init(index, server_name); } virtual ~JackShmReadWritePtr() @@ -203,6 +202,11 @@ class JackShmReadWritePtr Init(index); return *this; } + + void SetShmIndex(int index, const char* server_name) + { + Init(index, server_name); + } int GetShmIndex() { @@ -227,11 +231,11 @@ class JackShmReadWritePtr1 jack_shm_info_t fInfo; - void Init(int index) + void Init(int index, const char* server_name = "default") { if (fInfo.index < 0 && index >= 0) { JackLog("JackShmReadWritePtr1::Init %ld %ld\n", index, fInfo.index); - if (jack_initialize_shm_client() < 0) + if (jack_initialize_shm(server_name) < 0) throw - 1; fInfo.index = index; if (jack_attach_shm(&fInfo)) { @@ -255,9 +259,9 @@ class JackShmReadWritePtr1 fInfo.attached_at = NULL; } - JackShmReadWritePtr1(int index) + JackShmReadWritePtr1(int index, const char* server_name) { - Init(index); + Init(index, server_name); } virtual ~JackShmReadWritePtr1() @@ -284,6 +288,11 @@ class JackShmReadWritePtr1 Init(index); return *this; } + + void SetShmIndex(int index, const char* server_name) + { + Init(index, server_name); + } int GetShmIndex() { @@ -308,11 +317,11 @@ class JackShmReadPtr jack_shm_info_t fInfo; - void Init(int index) + void Init(int index, const char* server_name = "default") { if (fInfo.index < 0 && index >= 0) { JackLog("JackShmPtrRead::Init %ld %ld\n", index, fInfo.index); - if (jack_initialize_shm_client() < 0) + if (jack_initialize_shm(server_name) < 0) throw - 1; fInfo.index = index; if (jack_attach_shm_read(&fInfo)) { @@ -330,9 +339,9 @@ class JackShmReadPtr fInfo.attached_at = NULL; } - JackShmReadPtr(int index) + JackShmReadPtr(int index, const char* server_name) { - Init(index); + Init(index, server_name); } virtual ~JackShmReadPtr() @@ -359,6 +368,11 @@ class JackShmReadPtr Init(index); return *this; } + + void SetShmIndex(int index, const char* server_name) + { + Init(index, server_name); + } int GetShmIndex() { diff --git a/common/JackSocketClientChannel.cpp b/common/JackSocketClientChannel.cpp index 241e388b..bf3aaae0 100644 --- a/common/JackSocketClientChannel.cpp +++ b/common/JackSocketClientChannel.cpp @@ -41,6 +41,8 @@ JackSocketClientChannel::~JackSocketClientChannel() int JackSocketClientChannel::ServerCheck(const char* server_name) { JackLog("JackSocketClientChannel::ServerCheck = %s\n", server_name); + char jack_server_dir_name[512]; + snprintf(jack_server_dir_name, sizeof(jack_server_dir_name), "%s/%s", jack_server_dir, server_name); // Connect to server if (fRequestSocket.Connect(jack_server_dir, 0) < 0) { @@ -52,12 +54,14 @@ int JackSocketClientChannel::ServerCheck(const char* server_name) } } -int JackSocketClientChannel::Open(const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) +int JackSocketClientChannel::Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) { int result = 0; JackLog("JackSocketClientChannel::Open name = %s\n", name); + char jack_server_dir_name[512]; + snprintf(jack_server_dir_name, sizeof(jack_server_dir_name), "%s/%s", jack_server_dir, server_name); - if (fRequestSocket.Connect(jack_server_dir, 0) < 0) { + if (fRequestSocket.Connect(jack_server_dir_name, 0) < 0) { jack_error("Cannot connect to server socket"); goto error; } diff --git a/common/JackSocketClientChannel.h b/common/JackSocketClientChannel.h index 53bd49c1..3c1b5212 100644 --- a/common/JackSocketClientChannel.h +++ b/common/JackSocketClientChannel.h @@ -51,7 +51,7 @@ class JackSocketClientChannel : public JackClientChannelInterface, public JackRu JackSocketClientChannel(); virtual ~JackSocketClientChannel(); - int Open(const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status); + int Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status); void Close(); int Start(); diff --git a/common/JackSocketServerChannel.cpp b/common/JackSocketServerChannel.cpp index 9f3b30c8..8c4b2da2 100644 --- a/common/JackSocketServerChannel.cpp +++ b/common/JackSocketServerChannel.cpp @@ -44,13 +44,16 @@ JackSocketServerChannel::~JackSocketServerChannel() delete[] fPollTable; } -int JackSocketServerChannel::Open(JackServer* server) +int JackSocketServerChannel::Open(const char* server_name, JackServer* server) { JackLog("JackSocketServerChannel::Open \n"); + char jack_server_dir_name[512]; + snprintf(jack_server_dir_name, sizeof(jack_server_dir_name), "%s/%s", jack_server_dir, server_name); + fServer = server; // Prepare request socket - if (fRequestListenSocket.Bind(jack_server_dir, 0) < 0) { + if (fRequestListenSocket.Bind(jack_server_dir_name, 0) < 0) { JackLog("JackSocketServerChannel::Open : cannot create result listen socket\n"); return -1; } diff --git a/common/JackSocketServerChannel.h b/common/JackSocketServerChannel.h index dd8abab2..68b350c0 100644 --- a/common/JackSocketServerChannel.h +++ b/common/JackSocketServerChannel.h @@ -57,7 +57,7 @@ class JackSocketServerChannel : public JackServerChannelInterface, public JackRu JackSocketServerChannel(); virtual ~JackSocketServerChannel(); - int Open(JackServer* server); // Open the Server/Client connection + int Open(const char* server_name, JackServer* server); // Open the Server/Client connection void Close(); // Close the Server/Client connection // JackRunnableInterface interface diff --git a/common/JackSocketServerNotifyChannel.cpp b/common/JackSocketServerNotifyChannel.cpp index 3ca024a1..f513079f 100644 --- a/common/JackSocketServerNotifyChannel.cpp +++ b/common/JackSocketServerNotifyChannel.cpp @@ -25,9 +25,12 @@ This program is free software; you can redistribute it and/or modify namespace Jack { -int JackSocketServerNotifyChannel::Open() +int JackSocketServerNotifyChannel::Open(const char* server_name) { - if (fRequestSocket.Connect(jack_server_dir, 0) < 0) { + char jack_server_dir_name[512]; + snprintf(jack_server_dir_name, sizeof(jack_server_dir_name), "%s/%s", jack_server_dir, server_name); + + if (fRequestSocket.Connect(jack_server_dir_name, 0) < 0) { jack_error("Cannot connect to server socket"); return -1; } else { diff --git a/common/JackSocketServerNotifyChannel.h b/common/JackSocketServerNotifyChannel.h index f4ce0532..3412b877 100644 --- a/common/JackSocketServerNotifyChannel.h +++ b/common/JackSocketServerNotifyChannel.h @@ -43,7 +43,7 @@ class JackSocketServerNotifyChannel : public JackServerNotifyChannelInterface virtual ~JackSocketServerNotifyChannel() {} - int Open(); + int Open(const char* server_name); void Close(); void ClientNotify(int refnum, int notify, int value); diff --git a/common/JackSynchro.h b/common/JackSynchro.h index d067ecad..a59f381c 100644 --- a/common/JackSynchro.h +++ b/common/JackSynchro.h @@ -39,7 +39,7 @@ class JackSynchro char fName[SYNC_MAX_NAME_SIZE]; bool fFlush; // If true, signal are "flushed" : used for drivers that do no consume the signal - virtual void BuildName(const char* name, char* res) + virtual void BuildName(const char* name, const char* server_name, char* res) {} public: @@ -65,19 +65,19 @@ class JackSynchro { return true; } - virtual bool Allocate(const char* name, int value) + virtual bool Allocate(const char* name, const char* server_name, int value) { return true; } - virtual bool Connect(const char* name) + virtual bool Connect(const char* name, const char* server_name) { return true; } - virtual bool ConnectInput(const char* name) + virtual bool ConnectInput(const char* name, const char* server_name) { return true; } - virtual bool ConnectOutput(const char* name) + virtual bool ConnectOutput(const char* name, const char* server_name) { return true; } diff --git a/common/Jackdmp.cpp b/common/Jackdmp.cpp index 4624a361..57119b79 100644 --- a/common/Jackdmp.cpp +++ b/common/Jackdmp.cpp @@ -73,7 +73,7 @@ static void usage(FILE* file) copyright(file); fprintf(file, "\n" "usage: jackdmp [ --realtime OR -R [ --realtime-priority OR -P priority ] ]\n" - // " [ --name OR -n server-name ]\n" + " [ --name OR -n server-name ]\n" // " [ --no-mlock OR -m ]\n" // " [ --unlock OR -u ]\n" " [ --timeout OR -t client-timeout-in-msecs ]\n" @@ -103,10 +103,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 temporary, int time_out_ms, int rt, int priority, int loopback, int verbose) +static int JackStart(const char* server_name, 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, temporary, time_out_ms, rt, priority, loopback, verbose); + fServer = new JackServer(sync, temporary, time_out_ms, rt, priority, loopback, verbose, server_name); int res = fServer->Open(driver_desc, driver_params); return (res < 0) ? res : fServer->Start(); } @@ -141,7 +141,7 @@ static char* jack_default_server_name(void) { char* server_name; if ((server_name = getenv("JACK_DEFAULT_SERVER")) == NULL) - server_name = "jackdmp_default"; + server_name = "default"; return server_name; } @@ -452,7 +452,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, temporary, client_timeout, realtime, realtime_priority, loopback, jack_verbose); + int res = JackStart(server_name, driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, loopback, jack_verbose); if (res < 0) { jack_error("Cannot start server... exit"); JackDelete(); @@ -460,14 +460,6 @@ int main(int argc, char* argv[]) } /* - jack_client_t* c1 = my_jack_internal_client_new("c1", "inprocess.so", "untitled"); - jack_client_t* c2 = my_jack_internal_client_new("c2", "inprocess.so", "untitled"); - jack_client_t* c3 = my_jack_internal_client_new("c3", "inprocess.so", "untitled"); - jack_client_t* c4 = my_jack_internal_client_new("c4", "inprocess.so", "untitled"); - jack_client_t* c5 = my_jack_internal_client_new("c5", "inprocess.so", "untitled"); - */ - - /* For testing purpose... InternalMetro* client1 = new InternalMetro(1200, 0.4, 20, 80, "metro1"); InternalMetro* client2 = new InternalMetro(600, 0.4, 20, 150, "metro2"); @@ -523,15 +515,7 @@ int main(int argc, char* argv[]) sigprocmask(SIG_UNBLOCK, &signals, 0); } - /* - my_jack_internal_client_close(c1); - my_jack_internal_client_close(c2); - my_jack_internal_client_close(c3); - my_jack_internal_client_close(c4); - my_jack_internal_client_close(c5); - */ - - JackStop(); + JackStop(); jack_cleanup_shm(); jack_cleanup_files(server_name); diff --git a/common/jack/jack.h b/common/jack/jack.h index 69b56372..ae42ee9c 100644 --- a/common/jack/jack.h +++ b/common/jack/jack.h @@ -146,8 +146,6 @@ extern "C" const char *load_name, const char *load_init); - jack_client_t* my_jack_internal_client_new(const char* client_name, const char* dll_name, const char* object_data); - /** * Remove an internal client from a JACK server. * @@ -155,8 +153,6 @@ extern "C" */ void jack_internal_client_close (const char *client_name); - void my_jack_internal_client_close (jack_client_t* client); - /** * @param client pointer to JACK client structure. * diff --git a/common/shm.c b/common/shm.c index cf22d05e..7a1ba7a8 100644 --- a/common/shm.c +++ b/common/shm.c @@ -352,18 +352,6 @@ jack_initialize_shm (const char *server_name) } -// steph - -int jack_initialize_shm_server() -{ - return jack_initialize_shm("default"); -} - -int jack_initialize_shm_client() -{ - return jack_initialize_shm("default"); -} - char* jack_shm_addr (jack_shm_info_t* si) { return (char*)si->attached_at; diff --git a/common/varargs.h b/common/varargs.h index 238cb3c1..5e59f6b9 100644 --- a/common/varargs.h +++ b/common/varargs.h @@ -15,7 +15,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -* $Id: varargs.h,v 1.3 2005/11/23 11:24:00 letz Exp $ */ #ifndef __jack_varargs_h__ @@ -54,9 +53,12 @@ extern "C" jack_varargs_init (va); if ((options & JackServerName)) { + printf("jack_varargs_parse :JackServerName\n"); char *sn = va_arg(ap, char *); - if (sn) + if (sn) { + printf("jack_varargs_parse : FOUND SERVER NAME %s\n", sn); va->server_name = sn; + } } if ((options & JackLoadName)) va->load_name = va_arg(ap, char *); diff --git a/macosx/JackMachClientChannel.cpp b/macosx/JackMachClientChannel.cpp index d3520805..1bcfdd19 100644 --- a/macosx/JackMachClientChannel.cpp +++ b/macosx/JackMachClientChannel.cpp @@ -44,9 +44,11 @@ JackMachClientChannel::~JackMachClientChannel() int JackMachClientChannel::ServerCheck(const char* server_name) { JackLog("JackMachClientChannel::ServerCheck = %s\n", server_name); + char jack_server_entry_name[512]; + snprintf(jack_server_entry_name, sizeof(jack_server_entry_name), "%s_%s", jack_server_entry, server_name); // Connect to server - if (!fServerPort.ConnectPort(jack_server_entry)) { + if (!fServerPort.ConnectPort(jack_server_entry_name)) { jack_error("Cannot connect to server Mach port"); return -1; } else { @@ -54,12 +56,14 @@ int JackMachClientChannel::ServerCheck(const char* server_name) } } -int JackMachClientChannel::Open(const char* name, char* name_res, JackClient* client, jack_options_t options, jack_status_t* status) +int JackMachClientChannel::Open(const char* server_name, const char* name, char* name_res, JackClient* client, jack_options_t options, jack_status_t* status) { JackLog("JackMachClientChannel::Open name = %s\n", name); + char jack_server_entry_name[512]; + snprintf(jack_server_entry_name, sizeof(jack_server_entry_name), "%s_%s", jack_server_entry, server_name); // Connect to server - if (!fServerPort.ConnectPort(jack_server_entry)) { + if (!fServerPort.ConnectPort(jack_server_entry_name)) { jack_error("Cannot connect to server Mach port"); return -1; } diff --git a/macosx/JackMachClientChannel.h b/macosx/JackMachClientChannel.h index e585a471..a2610d3a 100644 --- a/macosx/JackMachClientChannel.h +++ b/macosx/JackMachClientChannel.h @@ -48,7 +48,7 @@ class JackMachClientChannel : public JackClientChannelInterface, public JackRunn JackMachClientChannel(); virtual ~JackMachClientChannel(); - int Open(const char* name, char* name_res, JackClient* client, jack_options_t options, jack_status_t* status); + int Open(const char* server_name, const char* name, char* name_res, JackClient* client, jack_options_t options, jack_status_t* status); void Close(); int Start(); diff --git a/macosx/JackMachSemaphore.cpp b/macosx/JackMachSemaphore.cpp index 6a7b21ba..c3b1969c 100644 --- a/macosx/JackMachSemaphore.cpp +++ b/macosx/JackMachSemaphore.cpp @@ -27,9 +27,9 @@ namespace Jack mach_port_t JackMachSemaphore::fBootPort = 0; -void JackMachSemaphore::BuildName(const char* name, char* res) +void JackMachSemaphore::BuildName(const char* name, const char* server_name, char* res) { - sprintf(res, "jack_mach_sem.%s", name); + sprintf(res, "jack_mach_sem.%s_%s", server_name, name); } bool JackMachSemaphore::Signal() @@ -84,9 +84,9 @@ bool JackMachSemaphore::TimedWait(long usec) } // Server side : publish the semaphore in the global namespace -bool JackMachSemaphore::Allocate(const char* name, int value) +bool JackMachSemaphore::Allocate(const char* name, const char* server_name, int value) { - BuildName(name, fName); + BuildName(name, server_name, fName); mach_port_t task = mach_task_self(); kern_return_t res; @@ -128,9 +128,9 @@ bool JackMachSemaphore::Allocate(const char* name, int value) } // Client side : get the published semaphore from server -bool JackMachSemaphore::ConnectInput(const char* name) +bool JackMachSemaphore::ConnectInput(const char* name, const char* server_name) { - BuildName(name, fName); + BuildName(name, server_name, fName); kern_return_t res; // Temporary... A REVOIR @@ -157,14 +157,14 @@ bool JackMachSemaphore::ConnectInput(const char* name) return true; } -bool JackMachSemaphore::Connect(const char* name) +bool JackMachSemaphore::Connect(const char* name, const char* server_name) { - return ConnectInput(name); + return ConnectInput(name, server_name); } -bool JackMachSemaphore::ConnectOutput(const char* name) +bool JackMachSemaphore::ConnectOutput(const char* name, const char* server_name) { - return ConnectInput(name); + return ConnectInput(name, server_name); } bool JackMachSemaphore::Disconnect() diff --git a/macosx/JackMachSemaphore.h b/macosx/JackMachSemaphore.h index 465d4b0f..69b744a5 100644 --- a/macosx/JackMachSemaphore.h +++ b/macosx/JackMachSemaphore.h @@ -45,7 +45,7 @@ class JackMachSemaphore : public JackSynchro protected: - void BuildName(const char* name, char* res); + void BuildName(const char* name, const char* server_name, char* res); public: @@ -59,10 +59,10 @@ class JackMachSemaphore : public JackSynchro bool Wait(); bool TimedWait(long usec); - bool Allocate(const char* name, int value); - bool Connect(const char* name); - bool ConnectInput(const char* name); - bool ConnectOutput(const char* name); + bool Allocate(const char* name, const char* server_name, int value); + bool Connect(const char* name, const char* server_name); + bool ConnectInput(const char* name, const char* server_name); + bool ConnectOutput(const char* name, const char* server_name); bool Disconnect(); void Destroy(); }; diff --git a/macosx/JackMachServerChannel.cpp b/macosx/JackMachServerChannel.cpp index 846e74b5..9c01d921 100644 --- a/macosx/JackMachServerChannel.cpp +++ b/macosx/JackMachServerChannel.cpp @@ -42,11 +42,13 @@ JackMachServerChannel::~JackMachServerChannel() delete fThread; } -int JackMachServerChannel::Open(JackServer* server) +int JackMachServerChannel::Open(const char* server_name, JackServer* server) { JackLog("JackMachServerChannel::Open\n"); + char jack_server_entry_name[512]; + snprintf(jack_server_entry_name, sizeof(jack_server_entry_name), "%s_%s", jack_server_entry, server_name); - if (!fServerPort.AllocatePort(jack_server_entry, 16)) { // 16 is the max possible value + if (!fServerPort.AllocatePort(jack_server_entry_name, 16)) { // 16 is the max possible value jack_error("Cannot check in Jack server"); return -1; } diff --git a/macosx/JackMachServerChannel.h b/macosx/JackMachServerChannel.h index f46ea029..ce948911 100644 --- a/macosx/JackMachServerChannel.h +++ b/macosx/JackMachServerChannel.h @@ -52,7 +52,7 @@ class JackMachServerChannel : public JackServerChannelInterface, public JackRunn JackMachServerChannel(); virtual ~JackMachServerChannel(); - int Open(JackServer* server); // Open the Server/Client connection + int Open(const char* server_name, JackServer* server); // Open the Server/Client connection void Close(); // Close the Server/Client connection JackEngine* GetEngine(); diff --git a/macosx/JackMachServerNotifyChannel.cpp b/macosx/JackMachServerNotifyChannel.cpp index 94ac3aa3..7c9ab9ec 100644 --- a/macosx/JackMachServerNotifyChannel.cpp +++ b/macosx/JackMachServerNotifyChannel.cpp @@ -24,11 +24,13 @@ This program is free software; you can redistribute it and/or modify namespace Jack { -int JackMachServerNotifyChannel::Open() +int JackMachServerNotifyChannel::Open(const char* server_name) { JackLog("JackMachServerChannel::Open\n"); + char jack_server_entry_name[512]; + snprintf(jack_server_entry_name, sizeof(jack_server_entry_name), "%s_%s", jack_server_entry, server_name); - if (!fClientPort.ConnectPort(jack_server_entry)) { + if (!fClientPort.ConnectPort(jack_server_entry_name)) { jack_error("Cannot connect to server port"); return -1; } else { diff --git a/macosx/JackMachServerNotifyChannel.h b/macosx/JackMachServerNotifyChannel.h index 44d31a2d..2ede611c 100644 --- a/macosx/JackMachServerNotifyChannel.h +++ b/macosx/JackMachServerNotifyChannel.h @@ -44,7 +44,7 @@ class JackMachServerNotifyChannel : public JackServerNotifyChannelInterface virtual ~JackMachServerNotifyChannel() {} - int Open(); // Open the Server/Client connection + int Open(const char* server_name); // Open the Server/Client connection void Close(); // Close the Server/Client connection void ClientNotify(int refnum, int notify, int value); diff --git a/tests/jack_test.cpp b/tests/jack_test.cpp index 877aaee0..22773d45 100644 --- a/tests/jack_test.cpp +++ b/tests/jack_test.cpp @@ -463,7 +463,8 @@ int main (int argc, char *argv[]) { const char **inports; // array of PHY input/output const char **outports; // array of PHY input/outputs - const char *server_name = NULL; + //const char *server_name = NULL; + const char *server_name = "titititi"; const char **connexions1; const char **connexions2; jack_status_t status; @@ -479,10 +480,10 @@ int main (int argc, char *argv[]) int connected = 0; // check connect functions of ports const char *options = "kRnqvt:"; float ratio; // for speed calculation in freewheel mode - jack_options_t jack_options = JackNullOption; + jack_options_t jack_options = JackNullOption; + //jack_options_t jack_options = JackServerName; struct option long_options[] = { - {"realtime", 0, 0, 'R' - }, + {"realtime", 0, 0, 'R'}, {"non-realtime", 0, 0, 'n'}, {"time", 0, 0, 't'}, {"quiet", 0, 0, 'q'}, diff --git a/tests/testSem.cpp b/tests/testSem.cpp index f7df7503..6d1356c8 100644 --- a/tests/testSem.cpp +++ b/tests/testSem.cpp @@ -42,8 +42,8 @@ struct ServerThread : public JackRunnableInterface { ServerThread() { - fServerSem->Allocate("JackSemServer", 0); - fClientSem->Allocate("JackSemClient", 0); + fServerSem->Allocate("JackSemServer", "default", 0); + fClientSem->Allocate("JackSemClient", "default", 0); //fThread = new JackMachThread(this); fThread->SetParams(0, 500*1000, 500*1000); fThread->Start(); @@ -76,8 +76,8 @@ struct ClientThread : public JackRunnableInterface { ClientThread() { - fServerSem->Connect("JackSemServer"); - fClientSem->Connect("JackSemClient"); + fServerSem->Connect("JackSemServer", "default"); + fClientSem->Connect("JackSemClient", "default"); //fThread = new JackMachThread(this); fThread->SetParams(0, 500*1000, 500*1000); fThread->Start(); @@ -114,7 +114,7 @@ void server(JackSynchro* sem) char c; printf("server\n"); - sem->Allocate("JackSem", 0); + sem->Allocate("JackSem", "default", 0); while (((c = getchar()) != 'q')) { @@ -141,7 +141,7 @@ void client(JackSynchro* sem) char c; printf("client\n"); - sem->Connect("JackSem"); + sem->Connect("JackSem", "default"); while (((c = getchar()) != 'q')) { diff --git a/tests/testSynchroClient.cpp b/tests/testSynchroClient.cpp index af31aa49..0661ac15 100644 --- a/tests/testSynchroClient.cpp +++ b/tests/testSynchroClient.cpp @@ -129,8 +129,8 @@ int main(int ac, char *av []) } #endif - sem1->ConnectOutput(SERVER); - sem2->ConnectInput(CLIENT); + sem1->ConnectOutput(SERVER, "default"); + sem2->ConnectInput(CLIENT, "default"); obj = new Test2(sem1, sem2); diff --git a/tests/testSynchroServer.cpp b/tests/testSynchroServer.cpp index 0a61ecde..0251c6d2 100644 --- a/tests/testSynchroServer.cpp +++ b/tests/testSynchroServer.cpp @@ -185,8 +185,8 @@ int main(int ac, char *av []) } #endif - sem1->Allocate(SERVER, 0); - sem2->Allocate(CLIENT, 0); + sem1->Allocate(SERVER, "default", 0); + sem2->Allocate(CLIENT, "default", 0); // run test in RT thread obj = new Test1(sem1, sem2); diff --git a/tests/testSynchroServerClient.cpp b/tests/testSynchroServerClient.cpp index acaeafcf..c96a49c6 100644 --- a/tests/testSynchroServerClient.cpp +++ b/tests/testSynchroServerClient.cpp @@ -233,10 +233,10 @@ int main(int ac, char *av []) } #endif - sem1->Allocate(SERVER, 0); - sem2->Allocate(CLIENT, 0); - sem3->ConnectOutput(SERVER); - sem4->ConnectInput(CLIENT); + sem1->Allocate(SERVER, "default", 0); + sem2->Allocate(CLIENT, "default", 0); + sem3->ConnectOutput(SERVER, "default"); + sem4->ConnectInput(CLIENT, "default"); // run test in RT thread obj1 = new Test1(sem1, sem2); diff --git a/windows/JackWinNamedPipeClientChannel.cpp b/windows/JackWinNamedPipeClientChannel.cpp index a54669a3..5904c685 100644 --- a/windows/JackWinNamedPipeClientChannel.cpp +++ b/windows/JackWinNamedPipeClientChannel.cpp @@ -49,7 +49,7 @@ int JackWinNamedPipeClientChannel::ServerCheck(const char* server_name) } } -int JackWinNamedPipeClientChannel::Open(const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) +int JackWinNamedPipeClientChannel::Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status) { int result = 0; JackLog("JackWinNamedPipeClientChannel::Open name = %s\n", name); @@ -251,41 +251,41 @@ void JackWinNamedPipeClientChannel::SetTimebaseCallback(int refnum, int conditio JackSetTimebaseCallbackRequest req(refnum, conditional); JackResult res; ServerSyncCall(&req, &res, result); -}
-
-void JackWinNamedPipeClientChannel::GetInternalClientName(int refnum, int int_ref, char* name_res, int* result)
-{
- JackGetInternalClientNameRequest req(refnum, int_ref);
- JackGetInternalClientNameResult res;
- ServerSyncCall(&req, &res, result);
- strcpy(name_res, res.fName);
-}
-
-void JackWinNamedPipeClientChannel::InternalClientHandle(int refnum, const char* client_name, int* status, int* int_ref, int* result)
-{
- JackInternalClientHandleRequest req(refnum, client_name);
- JackInternalClientHandleResult res;
- ServerSyncCall(&req, &res, result);
- *int_ref = res.fIntRefNum;
- *status = res.fStatus;
-}
-
-void JackWinNamedPipeClientChannel::InternalClientLoad(int refnum, const char* client_name, const char* so_name, const char* objet_data, int options, int* status, int* int_ref, int* result)
-{
- JackInternalClientLoadRequest req(refnum, client_name, so_name, objet_data, options);
- JackInternalClientLoadResult res;
- ServerSyncCall(&req, &res, result);
- *int_ref = res.fIntRefNum;
- *status = res.fStatus;
-}
-
-void JackWinNamedPipeClientChannel::InternalClientUnload(int refnum, int int_ref, int* status, int* result)
-{
- JackInternalClientUnloadRequest req(refnum, int_ref);
- JackInternalClientUnloadResult res;
- ServerSyncCall(&req, &res, result);
- *status = res.fStatus;
-}
+} + +void JackWinNamedPipeClientChannel::GetInternalClientName(int refnum, int int_ref, char* name_res, int* result) +{ + JackGetInternalClientNameRequest req(refnum, int_ref); + JackGetInternalClientNameResult res; + ServerSyncCall(&req, &res, result); + strcpy(name_res, res.fName); +} + +void JackWinNamedPipeClientChannel::InternalClientHandle(int refnum, const char* client_name, int* status, int* int_ref, int* result) +{ + JackInternalClientHandleRequest req(refnum, client_name); + JackInternalClientHandleResult res; + ServerSyncCall(&req, &res, result); + *int_ref = res.fIntRefNum; + *status = res.fStatus; +} + +void JackWinNamedPipeClientChannel::InternalClientLoad(int refnum, const char* client_name, const char* so_name, const char* objet_data, int options, int* status, int* int_ref, int* result) +{ + JackInternalClientLoadRequest req(refnum, client_name, so_name, objet_data, options); + JackInternalClientLoadResult res; + ServerSyncCall(&req, &res, result); + *int_ref = res.fIntRefNum; + *status = res.fStatus; +} + +void JackWinNamedPipeClientChannel::InternalClientUnload(int refnum, int int_ref, int* status, int* result) +{ + JackInternalClientUnloadRequest req(refnum, int_ref); + JackInternalClientUnloadResult res; + ServerSyncCall(&req, &res, result); + *status = res.fStatus; +} bool JackWinNamedPipeClientChannel::Init() { diff --git a/windows/JackWinNamedPipeClientChannel.h b/windows/JackWinNamedPipeClientChannel.h index 614c578c..de006161 100644 --- a/windows/JackWinNamedPipeClientChannel.h +++ b/windows/JackWinNamedPipeClientChannel.h @@ -50,7 +50,7 @@ class JackWinNamedPipeClientChannel : public JackClientChannelInterface, public JackWinNamedPipeClientChannel(); virtual ~JackWinNamedPipeClientChannel(); - int Open(const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status); + int Open(const char* server_name, const char* name, char* name_res, JackClient* obj, jack_options_t options, jack_status_t* status); void Close(); int Start(); @@ -78,12 +78,12 @@ class JackWinNamedPipeClientChannel : public JackClientChannelInterface, public void SetFreewheel(int onoff, int* result); void ReleaseTimebase(int refnum, int* result); - void SetTimebaseCallback(int refnum, int conditional, int* result);
-
- void GetInternalClientName(int refnum, int int_ref, char* name_res, int* result);
- void InternalClientHandle(int refnum, const char* client_name, int* status, int* int_ref, int* result);
- virtual void InternalClientLoad(int refnum, const char* client_name, const char* so_name, const char* objet_data, int options, int* status, int* int_ref, int* result);
- virtual void InternalClientUnload(int refnum, int int_ref, int* status, int* result);
+ void SetTimebaseCallback(int refnum, int conditional, int* result); + + void GetInternalClientName(int refnum, int int_ref, char* name_res, int* result); + void InternalClientHandle(int refnum, const char* client_name, int* status, int* int_ref, int* result); + virtual void InternalClientLoad(int refnum, const char* client_name, const char* so_name, const char* objet_data, int options, int* status, int* int_ref, int* result); + virtual void InternalClientUnload(int refnum, int int_ref, int* status, int* result); // JackRunnableInterface interface bool Init(); diff --git a/windows/JackWinNamedPipeServerChannel.cpp b/windows/JackWinNamedPipeServerChannel.cpp index 78e7b067..d18dd67b 100644 --- a/windows/JackWinNamedPipeServerChannel.cpp +++ b/windows/JackWinNamedPipeServerChannel.cpp @@ -54,7 +54,7 @@ JackClientPipeThread::~JackClientPipeThread() delete fThread; } -int JackClientPipeThread::Open(JackServer* server) // Open the Server/Client connection +int JackClientPipeThread::Open(const char* server_name, JackServer* server) // Open the Server/Client connection { fServer = server; @@ -257,46 +257,46 @@ int JackClientPipeThread::HandleRequest() res.fResult = fServer->GetEngine()->SetTimebaseCallback(req.fRefNum, req.fConditionnal); res.Write(fPipe); break; - }
-
- case JackRequest::kGetInternalClientName: {
- JackLog("JackRequest::kGetInternalClientName\n");
- JackGetInternalClientNameRequest req;
- JackGetInternalClientNameResult res;
- if (req.Read(fPipe) == 0)
- res.fResult = fServer->GetEngine()->GetInternalClientName(req.fIntRefNum, res.fName);
- res.Write(fPipe);
- break;
- }
-
- case JackRequest::kInternalClientHandle: {
- JackLog("JackRequest::kInternalClientHandle\n");
- JackInternalClientHandleRequest req;
- JackInternalClientHandleResult res;
- if (req.Read(fPipe) == 0)
- res.fResult = fServer->GetEngine()->InternalClientHandle(req.fName, &res.fStatus, &res.fIntRefNum);
- res.Write(fPipe);
- break;
- }
-
- case JackRequest::kInternalClientLoad: {
- JackLog("JackRequest::kInternalClientLoad\n");
- JackInternalClientLoadRequest req;
- JackInternalClientLoadResult res;
- if (req.Read(fPipe) == 0)
- res.fResult = fServer->InternalClientLoad(req.fName, req.fDllName, req.fLoadInitName, req.fOptions, &res.fIntRefNum, &res.fStatus);
- res.Write(fPipe);
- break;
- }
-
- case JackRequest::kInternalClientUnload: {
- JackLog("JackRequest::kInternalClientUnload\n");
- JackInternalClientUnloadRequest req;
- JackInternalClientUnloadResult res;
- if (req.Read(fPipe) == 0)
- res.fResult = fServer->GetEngine()->InternalClientUnload(req.fIntRefNum, &res.fStatus);
- res.Write(fPipe);
- break;
+ } + + case JackRequest::kGetInternalClientName: { + JackLog("JackRequest::kGetInternalClientName\n"); + JackGetInternalClientNameRequest req; + JackGetInternalClientNameResult res; + if (req.Read(fPipe) == 0) + res.fResult = fServer->GetEngine()->GetInternalClientName(req.fIntRefNum, res.fName); + res.Write(fPipe); + break; + } + + case JackRequest::kInternalClientHandle: { + JackLog("JackRequest::kInternalClientHandle\n"); + JackInternalClientHandleRequest req; + JackInternalClientHandleResult res; + if (req.Read(fPipe) == 0) + res.fResult = fServer->GetEngine()->InternalClientHandle(req.fName, &res.fStatus, &res.fIntRefNum); + res.Write(fPipe); + break; + } + + case JackRequest::kInternalClientLoad: { + JackLog("JackRequest::kInternalClientLoad\n"); + JackInternalClientLoadRequest req; + JackInternalClientLoadResult res; + if (req.Read(fPipe) == 0) + res.fResult = fServer->InternalClientLoad(req.fName, req.fDllName, req.fLoadInitName, req.fOptions, &res.fIntRefNum, &res.fStatus); + res.Write(fPipe); + break; + } + + case JackRequest::kInternalClientUnload: { + JackLog("JackRequest::kInternalClientUnload\n"); + JackInternalClientUnloadRequest req; + JackInternalClientUnloadResult res; + if (req.Read(fPipe) == 0) + res.fResult = fServer->GetEngine()->InternalClientUnload(req.fIntRefNum, &res.fStatus); + res.Write(fPipe); + break; } case JackRequest::kNotification: { diff --git a/windows/JackWinNamedPipeServerChannel.h b/windows/JackWinNamedPipeServerChannel.h index e5f02d2e..b003e161 100644 --- a/windows/JackWinNamedPipeServerChannel.h +++ b/windows/JackWinNamedPipeServerChannel.h @@ -50,7 +50,7 @@ class JackClientPipeThread : public JackRunnableInterface JackClientPipeThread(JackWinNamedPipeClient* pipe); virtual ~JackClientPipeThread(); - int Open(JackServer* server); // Open the Server/Client connection + int Open(const char* server_name, JackServer* server); // Open the Server/Client connection void Close(); // Close the Server/Client connection int HandleRequest(); diff --git a/windows/JackWinNamedPipeServerNotifyChannel.cpp b/windows/JackWinNamedPipeServerNotifyChannel.cpp index c116807f..1106a044 100644 --- a/windows/JackWinNamedPipeServerNotifyChannel.cpp +++ b/windows/JackWinNamedPipeServerNotifyChannel.cpp @@ -25,7 +25,7 @@ This program is free software; you can redistribute it and/or modify namespace Jack { -int JackWinNamedPipeServerNotifyChannel::Open() +int JackWinNamedPipeServerNotifyChannel::Open(const char* server_name) { if (fRequestPipe.Connect(jack_server_dir, 0) < 0) { jack_error("Cannot connect to server pipe"); diff --git a/windows/JackWinNamedPipeServerNotifyChannel.h b/windows/JackWinNamedPipeServerNotifyChannel.h index 91498bf9..09d3a2b8 100644 --- a/windows/JackWinNamedPipeServerNotifyChannel.h +++ b/windows/JackWinNamedPipeServerNotifyChannel.h @@ -43,7 +43,7 @@ class JackWinNamedPipeServerNotifyChannel : public JackServerNotifyChannelInterf virtual ~JackWinNamedPipeServerNotifyChannel() {} - int Open(); + int Open(const char* server_name); void Close(); void ClientNotify(int refnum, int notify, int value); |