diff --git a/ChangeLog b/ChangeLog index ea6e6437..fe47388d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,10 @@ Jackdmp changes log --------------------------- +2007-01-04 Stephane Letz + + * Add call to the init callback (set up using the jack_set_thread_init_callback API) in Real-Time and Notification threads. Define a new 'kActivateClient' notification. + 2006-12-23 Stephane Letz * shared_ports renamed to shared_graph. diff --git a/common/JackChannel.h b/common/JackChannel.h index d02d902d..97fdd59a 100644 --- a/common/JackChannel.h +++ b/common/JackChannel.h @@ -138,15 +138,16 @@ class JackNotifyChannelInterface typedef enum { kAddClient = 0, kRemoveClient = 1, - kXRunCallback = 2, - kGraphOrderCallback = 3, - kBufferSizeCallback = 4, - kStartFreewheel = 5, - kStopFreewheel = 6, - kPortRegistrationOn = 7, - kPortRegistrationOff = 8, - kZombifyClient = 9, - kDeadClient = 10 + kActivateClient = 2, + kXRunCallback = 3, + kGraphOrderCallback = 4, + kBufferSizeCallback = 5, + kStartFreewheel = 6, + kStopFreewheel = 7, + kPortRegistrationOn = 8, + kPortRegistrationOff = 9, + kZombifyClient = 10, + kDeadClient = 11 } NotificationType; }; diff --git a/common/JackClient.cpp b/common/JackClient.cpp index 72b43083..9e975b87 100644 --- a/common/JackClient.cpp +++ b/common/JackClient.cpp @@ -117,7 +117,7 @@ void JackClient::SetupDriverSync(bool freewheel) int JackClient::ClientNotifyImp(int refnum, const char* name, int notify, int sync, int value) { - return 0; + return 0; } int JackClient::ClientNotify(int refnum, const char* name, int notify, int sync, int value) @@ -131,7 +131,12 @@ int JackClient::ClientNotify(int refnum, const char* name, int notify, int sync, case JackNotifyChannelInterface::kRemoveClient: res = ClientNotifyImp(refnum, name, notify, sync, value); break; - } + + case JackNotifyChannelInterface::kActivateClient: + JackLog("JackClient::kActivateClient name = %s ref = %ld \n", name, refnum); + Init(); + break; + } /* The current semantic is that notifications can only be received when the client has been activated, @@ -191,7 +196,7 @@ int JackClient::ClientNotify(int refnum, const char* name, int notify, int sync, JackLog("JackClient::kZombifyClient name = %s ref = %ld \n", name, refnum); ShutDown(); break; - } + } } return res; @@ -279,7 +284,7 @@ bool JackClient::Init() { if (fInit) { JackLog("JackClient::Init calling client thread init callback\n"); - fInit(fInitArg); + fInit(fInitArg); } return true; } diff --git a/common/JackEngine.cpp b/common/JackEngine.cpp index 087959a4..d92d0975 100644 --- a/common/JackEngine.cpp +++ b/common/JackEngine.cpp @@ -323,6 +323,11 @@ void JackEngine::NotifyPortRegistation(jack_port_id_t port_index, bool onoff) NotifyClients((onoff ? JackNotifyChannelInterface::kPortRegistrationOn : JackNotifyChannelInterface::kPortRegistrationOff), false, port_index); } +void JackEngine::NotifyActivate(int refnum) +{ + NotifyClient(refnum, JackNotifyChannelInterface::kActivateClient, false, 0); +} + //------------------- // Client management //------------------- @@ -497,6 +502,7 @@ int JackEngine::ClientActivate(int refnum) JackLog("JackEngine::ClientActivate wait error ref = %ld name = %s\n", refnum, client->GetClientControl()->fName); return -1; } else { + NotifyActivate(refnum); return 0; } } diff --git a/common/JackEngine.h b/common/JackEngine.h index e8f3998f..0f0ea01b 100644 --- a/common/JackEngine.h +++ b/common/JackEngine.h @@ -109,6 +109,7 @@ class JackEngine void NotifyBufferSize(jack_nframes_t nframes); void NotifyFreewheel(bool onoff); void NotifyPortRegistation(jack_port_id_t port_index, bool onoff); + void NotifyActivate(int refnum); void PrintState(); }; diff --git a/common/JackLibClient.cpp b/common/JackLibClient.cpp index ad4add9a..3c948caf 100644 --- a/common/JackLibClient.cpp +++ b/common/JackLibClient.cpp @@ -143,7 +143,7 @@ int JackLibClient::ClientNotifyImp(int refnum, const char* name, int notify, int if (strcmp(GetClientControl()->fName, name) != 0) res = fSynchroTable[refnum]->Disconnect() ? 0 : -1; break; - } + } return res; } diff --git a/common/JackSocketClientChannel.cpp b/common/JackSocketClientChannel.cpp index b21a9df4..fed6d56a 100644 --- a/common/JackSocketClientChannel.cpp +++ b/common/JackSocketClientChannel.cpp @@ -226,7 +226,7 @@ bool JackSocketClientChannel::Init() jack_error("JackSocketClientChannel: cannot establish notication socket"); return false; } else { - return true; + return true; } } diff --git a/macosx/JackMachClientChannel.cpp b/macosx/JackMachClientChannel.cpp index bb085d2b..ce8e5a9a 100644 --- a/macosx/JackMachClientChannel.cpp +++ b/macosx/JackMachClientChannel.cpp @@ -41,7 +41,7 @@ JackMachClientChannel::~JackMachClientChannel() // Server <===> client -int JackMachClientChannel::Open(const char* name, JackClient* obj) +int JackMachClientChannel::Open(const char* name, JackClient* client) { JackLog("JackMachClientChannel::Open name = %s\n", name); @@ -60,7 +60,7 @@ int JackMachClientChannel::Open(const char* name, JackClient* obj) return -1; } - JackLibGlobals::fGlobals->fClientTable[fClientPort.GetPort()] = obj; + JackLibGlobals::fGlobals->fClientTable[fClientPort.GetPort()] = client; return 0; } diff --git a/macosx/JackMachClientChannel.h b/macosx/JackMachClientChannel.h index 484570ce..e516eef7 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, JackClient* obj); + int Open(const char* name, JackClient* client); void Close(); int Start(); @@ -75,7 +75,8 @@ class JackMachClientChannel : public JackClientChannelInterface, public JackRunn void ReleaseTimebase(int refnum, int* result); void SetTimebaseCallback(int refnum, int conditional, int* result); - bool Execute(); + // JackRunnableInterface interface + bool Execute(); }; diff --git a/windows/JackWinNamedPipeClientChannel.cpp b/windows/JackWinNamedPipeClientChannel.cpp index 8f32b4cd..6b7e252e 100644 --- a/windows/JackWinNamedPipeClientChannel.cpp +++ b/windows/JackWinNamedPipeClientChannel.cpp @@ -222,7 +222,7 @@ bool JackWinNamedPipeClientChannel::Init() jack_error("JackWinNamedPipeClientChannel: cannot establish notification pipe"); return false; } else { - return true; + return true; } }