Browse Source

Correct notification for kActivateClient event.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1498 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.64
sletz 18 years ago
parent
commit
51278d2099
3 changed files with 21 additions and 7 deletions
  1. +4
    -0
      ChangeLog
  2. +4
    -1
      common/JackClientControl.h
  3. +13
    -6
      common/JackEngine.cpp

+ 4
- 0
ChangeLog View File

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


2007-07-20 Stephane Letz <letz@grame.fr>

* Correct notification for kActivateClient event.

2007-06-11 Stephane Letz <letz@grame.fr> 2007-06-11 Stephane Letz <letz@grame.fr>


* Dmitry Baikov buffer size patch. * Dmitry Baikov buffer size patch.


+ 4
- 1
common/JackClientControl.h View File

@@ -25,7 +25,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackPort.h" #include "JackPort.h"
#include "JackSynchro.h" #include "JackSynchro.h"
#include "JackNotification.h" #include "JackNotification.h"

#include "transport_types.h" #include "transport_types.h"


namespace Jack namespace Jack
@@ -64,6 +63,10 @@ struct JackClientControl : public JackShmMem
strcpy(fName, name); strcpy(fName, name);
for (int i = 0; i < kMaxNotification; i++) for (int i = 0; i < kMaxNotification; i++)
fCallback[i] = false; fCallback[i] = false;
// Always activated
fCallback[kAddClient] = true;
fCallback[kRemoveClient] = true;
fCallback[kActivateClient] = true;
fRefNum = refnum; fRefNum = refnum;
fTransportState = JackTransportStopped; fTransportState = JackTransportStopped;
fZombie = false; fZombie = false;


+ 13
- 6
common/JackEngine.cpp View File

@@ -247,12 +247,15 @@ void JackEngine::ZombifyClient(int refnum)
void JackEngine::NotifyClient(int refnum, int event, int sync, int value) void JackEngine::NotifyClient(int refnum, int event, int sync, int value)
{ {
JackClientInterface* client = fClientTable[refnum]; JackClientInterface* client = fClientTable[refnum];
// The client may be notified by the RT thread while closing // 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) 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); jack_error("NotifyClient fails name = %s event = %ld = val = %ld", client->GetClientControl()->fName, event, value);
} else { } 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++) { for (int i = 0; i < CLIENT_NUM; i++) {
JackClientInterface* client = fClientTable[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);
}
}
} }
} }




Loading…
Cancel
Save