diff --git a/ChangeLog b/ChangeLog index b38cf3ac..335a4d21 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,10 @@ Jackdmp changes log --------------------------- +2007-07-20 Stephane Letz + + * Correct notification for kActivateClient event. + 2007-06-11 Stephane Letz * Dmitry Baikov buffer size patch. diff --git a/common/JackClientControl.h b/common/JackClientControl.h index fd661a52..3ad14f0f 100644 --- a/common/JackClientControl.h +++ b/common/JackClientControl.h @@ -25,7 +25,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "JackPort.h" #include "JackSynchro.h" #include "JackNotification.h" - #include "transport_types.h" namespace Jack @@ -64,6 +63,10 @@ struct JackClientControl : public JackShmMem strcpy(fName, name); for (int i = 0; i < kMaxNotification; i++) fCallback[i] = false; + // Always activated + fCallback[kAddClient] = true; + fCallback[kRemoveClient] = true; + fCallback[kActivateClient] = true; fRefNum = refnum; fTransportState = JackTransportStopped; fZombie = false; diff --git a/common/JackEngine.cpp b/common/JackEngine.cpp index 68e50bc6..bc18dcfc 100644 --- a/common/JackEngine.cpp +++ b/common/JackEngine.cpp @@ -247,12 +247,15 @@ void JackEngine::ZombifyClient(int refnum) void JackEngine::NotifyClient(int refnum, int event, int sync, int value) { JackClientInterface* client = fClientTable[refnum]; + // The client may be notified by the RT thread while closing - if (client && client->GetClientControl()->fCallback[event]) { + if (!client) { + JackLog("JackEngine::NotifyClient: client not available anymore\n"); + } else if (client->GetClientControl()->fCallback[event]) { if (client->ClientNotify(refnum, client->GetClientControl()->fName, event, sync, value) < 0) jack_error("NotifyClient fails name = %s event = %ld = val = %ld", client->GetClientControl()->fName, event, value); } else { - JackLog("JackEngine::NotifyClient: client not available anymore\n"); + JackLog("JackEngine::NotifyClient: no callback for event = %ld\n", event); } } @@ -260,10 +263,14 @@ void JackEngine::NotifyClients(int event, int sync, int value) { for (int i = 0; i < CLIENT_NUM; i++) { JackClientInterface* client = fClientTable[i]; - if (client && client->GetClientControl()->fCallback[event]) { - if (client->ClientNotify(i, client->GetClientControl()->fName, event, sync, value) < 0) - jack_error("NotifyClient fails name = %s event = %ld = val = %ld", client->GetClientControl()->fName, event, value); - } + if (client) { + if (client->GetClientControl()->fCallback[event]) { + if (client->ClientNotify(i, client->GetClientControl()->fName, event, sync, value) < 0) + jack_error("NotifyClient fails name = %s event = %ld = val = %ld", client->GetClientControl()->fName, event, value); + } else { + JackLog("JackEngine::NotifyClients: no callback for event = %ld\n", event); + } + } } }