git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2279 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.90
@@ -20,7 +20,11 @@ Fernando Lopez-Lezcano | |||
Jackdmp changes log | |||
--------------------------- | |||
2008-05-13 Stephane Letz <letz@grame.fr> | |||
2008-05-16 Stephane Letz <letz@grame.fr> | |||
* Activate now connect to FW driver and start the realtime thread only if clients are actually realtime, that is have setup any of the RT callback. | |||
2008-05-14 Stephane Letz <letz@grame.fr> | |||
* Fix JackEngine::Close to only delete "loadable" clients. | |||
@@ -80,7 +80,7 @@ class JackClientChannelInterface | |||
virtual void ClientClose(int refnum, int* result) | |||
{} | |||
virtual void ClientActivate(int refnum, int* result) | |||
virtual void ClientActivate(int refnum, int state, int* result) | |||
{} | |||
virtual void ClientDeactivate(int refnum, int* result) | |||
{} | |||
@@ -35,6 +35,8 @@ using namespace std; | |||
namespace Jack | |||
{ | |||
#define IsRealTime() ((fProcess != NULL) | (fThreadFun != NULL) | (fSync != NULL) | (fTimebase != NULL)) | |||
JackClient::JackClient() | |||
{} | |||
@@ -52,7 +54,9 @@ JackClient::JackClient(JackSynchro** table) | |||
fFreewheel = NULL; | |||
fPortRegistration = NULL; | |||
fPortConnect = NULL; | |||
fTimebase = NULL; | |||
fSync = NULL; | |||
fThreadFun = NULL; | |||
fProcessArg = NULL; | |||
fGraphOrderArg = NULL; | |||
fXrunArg = NULL; | |||
@@ -64,7 +68,7 @@ JackClient::JackClient(JackSynchro** table) | |||
fPortRegistrationArg = NULL; | |||
fPortConnectArg = NULL; | |||
fSyncArg = NULL; | |||
fThreadFun = NULL; | |||
fTimebaseArg = NULL; | |||
fThreadFunArg = NULL; | |||
} | |||
@@ -232,25 +236,17 @@ int JackClient::ClientNotify(int refnum, const char* name, int notify, int sync, | |||
\brief We need to start thread before activating in the server, otherwise the FW driver | |||
connected to the client may not be activated. | |||
*/ | |||
int JackClient::Activate() | |||
{ | |||
jack_log("JackClient::Activate"); | |||
if (IsActive()) | |||
return 0; | |||
/* TODO : solve WIN32 thread Kill issue | |||
#ifdef WIN32 | |||
// Done first so that the RT thread then access an allocated synchro | |||
if (!fSynchroTable[GetClientControl()->fRefNum]->Connect(GetClientControl()->fName)) { | |||
jack_error("Cannot ConnectSemaphore %s client", GetClientControl()->fName); | |||
// RT thread is started only when needed... | |||
if (IsRealTime()) { | |||
if (StartThread() < 0) | |||
return -1; | |||
} | |||
#endif | |||
*/ | |||
if (StartThread() < 0) | |||
return -1; | |||
} | |||
/* | |||
Insertion of client in the graph will cause a kGraphOrderCallback notification | |||
@@ -263,7 +259,8 @@ int JackClient::Activate() | |||
GetClientControl()->fTransportTimebase = true; | |||
int result = -1; | |||
fChannel->ClientActivate(GetClientControl()->fRefNum, &result); | |||
GetClientControl()->fCallback[kRealTimeCallback] = IsRealTime(); | |||
fChannel->ClientActivate(GetClientControl()->fRefNum, IsRealTime(), &result); | |||
return result; | |||
} | |||
@@ -288,15 +285,10 @@ int JackClient::Deactivate() | |||
jack_log("JackClient::Deactivate res = %ld ", result); | |||
// We need to wait for the new engine cycle before stopping the RT thread, but this is done by ClientDeactivate | |||
/* TODO : solve WIN32 thread Kill issue | |||
#ifdef WIN32 | |||
fSynchroTable[GetClientControl()->fRefNum]->Disconnect(); | |||
fThread->Stop(); | |||
#else | |||
fThread->Kill(); | |||
#endif | |||
*/ | |||
fThread->Kill(); | |||
// RT thread is stopped only when needed... | |||
if (IsRealTime()) { | |||
fThread->Kill(); | |||
} | |||
return result; | |||
} | |||
@@ -67,9 +67,9 @@ namespace Jack | |||
#define ALL_CLIENTS -1 // for notification | |||
#if defined(__ppc64__) || defined(__x86_64__) | |||
#define JACK_PROTOCOL_VERSION 4 | |||
#define JACK_PROTOCOL_VERSION 5 | |||
#else | |||
#define JACK_PROTOCOL_VERSION 3 | |||
#define JACK_PROTOCOL_VERSION 4 | |||
#endif | |||
#define SOCKET_TIME_OUT 5 // in sec | |||
@@ -596,14 +596,15 @@ int JackEngine::ClientCloseAux(int refnum, JackClientInterface* client, bool wai | |||
return 0; | |||
} | |||
int JackEngine::ClientActivate(int refnum) | |||
int JackEngine::ClientActivate(int refnum, bool state) | |||
{ | |||
JackClientInterface* client = fClientTable[refnum]; | |||
assert(fClientTable[refnum]); | |||
jack_log("JackEngine::ClientActivate ref = %ld name = %s", refnum, client->GetClientControl()->fName); | |||
fGraphManager->Activate(refnum); | |||
if (state) | |||
fGraphManager->Activate(refnum); | |||
// Wait for graph state change to be effective | |||
if (!fSignal->TimedWait(fEngineControl->fTimeOutUsecs * 10)) { | |||
jack_error("JackEngine::ClientActivate wait error ref = %ld name = %s", refnum, client->GetClientControl()->fName); | |||
@@ -86,7 +86,7 @@ class JackEngine | |||
virtual int ClientExternalClose(int refnum); | |||
virtual int ClientInternalClose(int refnum, bool wait); | |||
virtual int ClientActivate(int refnum); | |||
virtual int ClientActivate(int refnum, bool state); | |||
virtual int ClientDeactivate(int refnum); | |||
// Internal client management | |||
@@ -63,9 +63,9 @@ class JackInternalClientChannel : public JackClientChannelInterface | |||
*result = fEngine->ClientInternalClose(refnum, true); | |||
} | |||
void ClientActivate(int refnum, int* result) | |||
void ClientActivate(int refnum, int state, int* result) | |||
{ | |||
*result = fEngine->ClientActivate(refnum); | |||
*result = fEngine->ClientActivate(refnum, state); | |||
} | |||
void ClientDeactivate(int refnum, int* result) | |||
{ | |||
@@ -107,15 +107,6 @@ int JackLibClient::Open(const char* server_name, const char* name, jack_options_ | |||
SetupDriverSync(false); | |||
/* TODO : solve WIN32 thread Kill issue | |||
#ifndef WIN32 | |||
// 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)) { | |||
jack_error("Cannot ConnectSemaphore %s client", name); | |||
goto error; | |||
} | |||
#endif | |||
*/ | |||
// Connect shared synchro : the synchro must be usable in I/O mode when several clients live in the same process | |||
if (!fSynchroTable[GetClientControl()->fRefNum]->Connect(name_res, fServerName)) { | |||
jack_error("Cannot ConnectSemaphore %s client", name_res); | |||
@@ -84,10 +84,10 @@ class JackLockedEngine : public JackEngine, public JackLockAble | |||
return fEngine->ClientInternalClose(refnum, wait); | |||
} | |||
int ClientActivate(int refnum) | |||
int ClientActivate(int refnum, bool state) | |||
{ | |||
JackLock lock(this); | |||
return fEngine->ClientActivate(refnum); | |||
return fEngine->ClientActivate(refnum, state); | |||
} | |||
int ClientDeactivate(int refnum) | |||
{ | |||
@@ -35,7 +35,8 @@ enum NotificationType { | |||
kPortRegistrationOffCallback = 9, | |||
kPortConnectCallback = 10, | |||
kPortDisconnectCallback = 11, | |||
kDeadClient = 12, | |||
kRealTimeCallback = 12, | |||
kDeadClient = 13, | |||
kMaxNotification | |||
}; | |||
@@ -287,21 +287,24 @@ struct JackActivateRequest : public JackRequest | |||
{ | |||
int fRefNum; | |||
int fState; | |||
JackActivateRequest() | |||
{} | |||
JackActivateRequest(int refnum): JackRequest(JackRequest::kActivateClient), fRefNum(refnum) | |||
JackActivateRequest(int refnum, int state): JackRequest(JackRequest::kActivateClient), fRefNum(refnum), fState(state) | |||
{} | |||
int Read(JackChannelTransaction* trans) | |||
{ | |||
return trans->Read(&fRefNum, sizeof(int)); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
return trans->Read(&fState, sizeof(int)); | |||
} | |||
int Write(JackChannelTransaction* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
return trans->Write(&fRefNum, sizeof(int)); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
return trans->Write(&fState, sizeof(int)); | |||
} | |||
}; | |||
@@ -165,9 +165,9 @@ void JackSocketClientChannel::ClientClose(int refnum, int* result) | |||
ServerSyncCall(&req, &res, result); | |||
} | |||
void JackSocketClientChannel::ClientActivate(int refnum, int* result) | |||
void JackSocketClientChannel::ClientActivate(int refnum, int state, int* result) | |||
{ | |||
JackActivateRequest req(refnum); | |||
JackActivateRequest req(refnum, state); | |||
JackResult res; | |||
ServerSyncCall(&req, &res, result); | |||
} | |||
@@ -63,7 +63,7 @@ class JackSocketClientChannel : public JackClientChannelInterface, public JackRu | |||
void ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result); | |||
void ClientClose(int refnum, int* result); | |||
void ClientActivate(int refnum, int* result); | |||
void ClientActivate(int refnum, int state, int* result); | |||
void ClientDeactivate(int refnum, int* result); | |||
void PortRegister(int refnum, const char* name, const char* type, unsigned int flags, unsigned int buffer_size, unsigned int* port_index, int* result); | |||
@@ -190,7 +190,7 @@ int JackSocketServerChannel::HandleRequest(int fd) | |||
JackResult res; | |||
jack_log("JackRequest::ActivateClient"); | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum); | |||
res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum, ref.fState); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::ActivateClient write error ref = %d", req.fRefNum); | |||
break; | |||
@@ -101,10 +101,11 @@ void JackTransportEngine::MakeAllStartingLocating(JackClientInterface** table) | |||
for (int i = REAL_REFNUM; i < CLIENT_NUM; i++) { | |||
JackClientInterface* client = table[i]; | |||
if (client) { | |||
// Inactive clients don't have their process function called at all, so they must appear as already "rolling" for the transport.... | |||
client->GetClientControl()->fTransportState = (client->GetClientControl()->fActive) ? JackTransportStarting : JackTransportRolling; | |||
client->GetClientControl()->fTransportSync = true; | |||
client->GetClientControl()->fTransportTimebase = true; | |||
JackClientControl* control = client->GetClientControl(); | |||
// Inactive clients don't have their process function called at all, so they must appear as already "rolling" for the transport.... | |||
control->fTransportState = (control->fActive && control->fCallback[kRealTimeCallback]) ? JackTransportStarting : JackTransportRolling; | |||
control->fTransportSync = true; | |||
control->fTransportTimebase = true; | |||
jack_log("MakeAllStartingLocating ref = %ld", i); | |||
} | |||
} | |||
@@ -116,9 +117,10 @@ void JackTransportEngine::MakeAllStopping(JackClientInterface** table) | |||
for (int i = REAL_REFNUM; i < CLIENT_NUM; i++) { | |||
JackClientInterface* client = table[i]; | |||
if (client) { | |||
client->GetClientControl()->fTransportState = JackTransportStopped; | |||
client->GetClientControl()->fTransportSync = false; | |||
client->GetClientControl()->fTransportTimebase = false; | |||
JackClientControl* control = client->GetClientControl(); | |||
control->fTransportState = JackTransportStopped; | |||
control->fTransportSync = false; | |||
control->fTransportTimebase = false; | |||
jack_log("MakeAllStopping ref = %ld", i); | |||
} | |||
} | |||
@@ -130,8 +132,9 @@ void JackTransportEngine::MakeAllLocating(JackClientInterface** table) | |||
for (int i = REAL_REFNUM; i < CLIENT_NUM; i++) { | |||
JackClientInterface* client = table[i]; | |||
if (client) { | |||
client->GetClientControl()->fTransportState = JackTransportStopped; | |||
client->GetClientControl()->fTransportTimebase = true; | |||
JackClientControl* control = client->GetClientControl(); | |||
control->fTransportState = JackTransportStopped; | |||
control->fTransportTimebase = true; | |||
jack_log("MakeAllLocating ref = %ld", i); | |||
} | |||
} | |||
@@ -155,7 +158,7 @@ void JackTransportEngine::CycleEnd(JackClientInterface** table, jack_nframes_t f | |||
transport_command_t cmd = fTransportCmd; | |||
if (cmd != fPreviousCmd) { | |||
fPreviousCmd = cmd; | |||
jack_log("transport command: %s", (cmd == TransportCommandStart ? "START" : "STOP")); | |||
jack_log("transport command: %s", (cmd == TransportCommandStart ? "Transport start" : "Transport stop")); | |||
} else { | |||
cmd = TransportCommandNone; | |||
} | |||
@@ -59,12 +59,12 @@ rpc_type server_rpc_jack_client_close(mach_port_t private_port, int refnum, int* | |||
return KERN_SUCCESS; | |||
} | |||
rpc_type server_rpc_jack_client_activate(mach_port_t private_port, int refnum, int* result) | |||
rpc_type server_rpc_jack_client_activate(mach_port_t private_port, int refnum, int state, int* result) | |||
{ | |||
jack_log("rpc_jack_client_activate"); | |||
JackMachServerChannel* channel = JackMachServerChannel::fPortTable[private_port]; | |||
assert(channel); | |||
*result = channel->GetEngine()->ClientActivate(refnum); | |||
*result = channel->GetEngine()->ClientActivate(refnum, state); | |||
return KERN_SUCCESS; | |||
} | |||
@@ -152,9 +152,9 @@ void JackMachClientChannel::ClientClose(int refnum, int* result) | |||
} | |||
} | |||
void JackMachClientChannel::ClientActivate(int refnum, int* result) | |||
void JackMachClientChannel::ClientActivate(int refnum, int state, int* result) | |||
{ | |||
kern_return_t res = rpc_jack_client_activate(fPrivatePort, refnum, result); | |||
kern_return_t res = rpc_jack_client_activate(fPrivatePort, refnum, state, result); | |||
if (res != KERN_SUCCESS) { | |||
*result = -1; | |||
jack_error("JackMachClientChannel::ClientActivate err = %s", mach_error_string(res)); | |||
@@ -60,7 +60,7 @@ class JackMachClientChannel : public JackClientChannelInterface, public JackRunn | |||
void ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result); | |||
void ClientClose(int refnum, int* result); | |||
void ClientActivate(int refnum, int* result); | |||
void ClientActivate(int refnum, int state, int* result); | |||
void ClientDeactivate(int refnum, int* result); | |||
void PortRegister(int refnum, const char* name, const char* type, unsigned int flags, unsigned int buffer_size, unsigned int* port_index, int* result); | |||
@@ -1000,7 +1000,7 @@ | |||
4B2C28F908DAD01E00249230 /* JackGlobals.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackGlobals.cpp; path = ../common/JackGlobals.cpp; sourceTree = SOURCE_ROOT; }; | |||
4B35C4250D4731D1000DE7AE /* jackdmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jackdmp; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4B35C4830D4731D1000DE7AE /* Jackmp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackmp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackdmp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackservermp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4B35C5080D4731D1000DE7AE /* Jackwrapper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackwrapper.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4B35C5140D4731D1000DE7AE /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4B35C5200D4731D1000DE7AE /* jack_midisine */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midisine; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
@@ -1034,10 +1034,10 @@ | |||
4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMacEngineRPC.cpp; sourceTree = SOURCE_ROOT; }; | |||
4B44FAE50C7598370033A72C /* JackServerLaunch.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackServerLaunch.cpp; path = ../common/JackServerLaunch.cpp; sourceTree = SOURCE_ROOT; }; | |||
4B464301076CAC7700E5077C /* Jack-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "Jack-Info.plist"; sourceTree = SOURCE_ROOT; }; | |||
4B51752F0D8FE69300961F37 /* jack_thread_wait */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4B51752F0D8FE69300961F37 /* jack_thread_wait1 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait1; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4B56880F08B5C8620022B32D /* JackFifo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackFifo.cpp; path = ../common/JackFifo.cpp; sourceTree = SOURCE_ROOT; }; | |||
4B56881008B5C8620022B32D /* JackFifo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackFifo.h; path = ../common/JackFifo.h; sourceTree = SOURCE_ROOT; }; | |||
4B57F5950D72C27900B4E719 /* jack_thread_wait */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4B57F5950D72C27900B4E719 /* jack_thread_wait1 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait1; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4B57F5BA0D72C2B000B4E719 /* tw1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tw1.c; path = "../example-clients/tw1.c"; sourceTree = SOURCE_ROOT; }; | |||
4B5A1BBB0CD1CB9E0005BF74 /* jack_midiseq */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_midiseq; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4B5A1BBD0CD1CC110005BF74 /* midiseq.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = midiseq.c; path = "../example-clients/midiseq.c"; sourceTree = SOURCE_ROOT; }; | |||
@@ -1105,7 +1105,7 @@ | |||
4BA692B20CBE4C2D00EAD520 /* ipload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipload.c; path = "../example-clients/ipload.c"; sourceTree = SOURCE_ROOT; }; | |||
4BA692D40CBE4C9000EAD520 /* jack_unload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_unload; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4BA692D60CBE4CC600EAD520 /* ipunload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipunload.c; path = "../example-clients/ipunload.c"; sourceTree = SOURCE_ROOT; }; | |||
4BA7FEC30D8E76270017FF73 /* jack_lsp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_lsp; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4BA7FEC30D8E76270017FF73 /* jack_server_control */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_server_control; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
4BA7FEC80D8E76650017FF73 /* control.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = control.c; path = "../example-clients/control.c"; sourceTree = SOURCE_ROOT; }; | |||
4BAB95B60B9E20B800A0C723 /* JackPortType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackPortType.cpp; path = ../common/JackPortType.cpp; sourceTree = SOURCE_ROOT; }; | |||
4BAB95B70B9E20B800A0C723 /* JackPortType.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackPortType.h; path = ../common/JackPortType.h; sourceTree = SOURCE_ROOT; }; | |||
@@ -1723,7 +1723,7 @@ | |||
4B5A1BDA0CD1CCE10005BF74 /* jack_midisine */, | |||
4B35C4250D4731D1000DE7AE /* jackdmp */, | |||
4B35C4830D4731D1000DE7AE /* Jackmp.framework */, | |||
4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */, | |||
4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */, | |||
4B35C5080D4731D1000DE7AE /* Jackwrapper.framework */, | |||
4B35C5140D4731D1000DE7AE /* jack_midiseq */, | |||
4B35C5200D4731D1000DE7AE /* jack_midisine */, | |||
@@ -1752,9 +1752,9 @@ | |||
4B0A292D0D52108E002EFF74 /* jack_thread_wait */, | |||
4B0A296D0D5231DC002EFF74 /* jack_mp_thread_wait */, | |||
4B0A2A650D524AB2002EFF74 /* jack_mp_thread_wait */, | |||
4B57F5950D72C27900B4E719 /* jack_thread_wait */, | |||
4BA7FEC30D8E76270017FF73 /* jack_lsp */, | |||
4B51752F0D8FE69300961F37 /* jack_thread_wait */, | |||
4B57F5950D72C27900B4E719 /* jack_thread_wait1 */, | |||
4BA7FEC30D8E76270017FF73 /* jack_server_control */, | |||
4B51752F0D8FE69300961F37 /* jack_thread_wait1 */, | |||
); | |||
name = Products; | |||
sourceTree = "<group>"; | |||
@@ -2875,7 +2875,7 @@ | |||
); | |||
name = "Jackservermp.framework 64 bits"; | |||
productName = Jack; | |||
productReference = 4B35C4FC0D4731D1000DE7AE /* Jackdmp.framework */; | |||
productReference = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; | |||
productType = "com.apple.product-type.framework"; | |||
}; | |||
4B35C4FE0D4731D1000DE7AE /* Jackwrapper.framework 64 bits */ = { | |||
@@ -3342,7 +3342,7 @@ | |||
name = "jack_thread_wait1 64 bits"; | |||
productInstallPath = /usr/local/bin; | |||
productName = testSem; | |||
productReference = 4B51752F0D8FE69300961F37 /* jack_thread_wait */; | |||
productReference = 4B51752F0D8FE69300961F37 /* jack_thread_wait1 */; | |||
productType = "com.apple.product-type.tool"; | |||
}; | |||
4B57F58B0D72C27900B4E719 /* jack_thread_wait1 */ = { | |||
@@ -3361,7 +3361,7 @@ | |||
name = jack_thread_wait1; | |||
productInstallPath = /usr/local/bin; | |||
productName = testSem; | |||
productReference = 4B57F5950D72C27900B4E719 /* jack_thread_wait */; | |||
productReference = 4B57F5950D72C27900B4E719 /* jack_thread_wait1 */; | |||
productType = "com.apple.product-type.tool"; | |||
}; | |||
4B5A1BB10CD1CB9E0005BF74 /* jack_midiseq Universal */ = { | |||
@@ -3793,7 +3793,7 @@ | |||
name = "jack_server_control Universal"; | |||
productInstallPath = /usr/local/bin; | |||
productName = jack_lsp; | |||
productReference = 4BA7FEC30D8E76270017FF73 /* jack_lsp */; | |||
productReference = 4BA7FEC30D8E76270017FF73 /* jack_server_control */; | |||
productType = "com.apple.product-type.tool"; | |||
}; | |||
4BD623ED0CBCF0F000DE782F /* inprocess */ = { | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* IDENTIFICATION: | |||
* stub generated Mon Jan 28 15:04:07 2008 | |||
* with a MiG generated Sun Sep 23 15:44:06 PDT 2007 by root@hoosier.apple.com | |||
* stub generated Fri May 16 09:21:55 2008 | |||
* with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local | |||
* OPTIONS: | |||
*/ | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* IDENTIFICATION: | |||
* stub generated Mon Jan 28 15:04:07 2008 | |||
* with a MiG generated Sun Sep 23 15:44:06 PDT 2007 by root@hoosier.apple.com | |||
* stub generated Fri May 16 09:21:55 2008 | |||
* with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local | |||
* OPTIONS: | |||
*/ | |||
#define __MIG_check__Reply__JackRPCClient_subsystem__ 1 | |||
@@ -57,6 +57,7 @@ routine rpc_jack_client_close( | |||
routine rpc_jack_client_activate( | |||
server_port : mach_port_t; | |||
refnum : int; | |||
state : int; | |||
out result : int); | |||
routine rpc_jack_client_deactivate( | |||
@@ -100,6 +100,7 @@ kern_return_t rpc_jack_client_activate | |||
( | |||
mach_port_t server_port, | |||
int refnum, | |||
int state, | |||
int *result | |||
); | |||
@@ -404,6 +405,7 @@ __END_DECLS | |||
mach_msg_header_t Head; | |||
NDR_record_t NDR; | |||
int refnum; | |||
int state; | |||
} __Request__rpc_jack_client_activate_t; | |||
#ifdef __MigPackStructs | |||
#pragma pack() | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* IDENTIFICATION: | |||
* stub generated Mon Jan 28 15:04:07 2008 | |||
* with a MiG generated Sun Sep 23 15:44:06 PDT 2007 by root@hoosier.apple.com | |||
* stub generated Fri May 16 09:21:56 2008 | |||
* with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local | |||
* OPTIONS: | |||
*/ | |||
@@ -149,6 +149,7 @@ | |||
mach_msg_header_t Head; | |||
NDR_record_t NDR; | |||
int refnum; | |||
int state; | |||
} __Request__rpc_jack_client_activate_t; | |||
#ifdef __MigPackStructs | |||
#pragma pack() | |||
@@ -1463,6 +1464,26 @@ mig_internal novalue _Xrpc_jack_client_close | |||
#endif /* defined(__NDR_convert__*__defined) */ | |||
#endif /* __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__refnum__defined */ | |||
#ifndef __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#if defined(__NDR_convert__int_rep__JackRPCEngine__int__defined) | |||
#define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
__NDR_convert__int_rep__JackRPCEngine__int((int *)(a), f) | |||
#elif defined(__NDR_convert__int_rep__int__defined) | |||
#define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
__NDR_convert__int_rep__int((int *)(a), f) | |||
#elif defined(__NDR_convert__int_rep__JackRPCEngine__int32_t__defined) | |||
#define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
__NDR_convert__int_rep__JackRPCEngine__int32_t((int32_t *)(a), f) | |||
#elif defined(__NDR_convert__int_rep__int32_t__defined) | |||
#define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#define __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
__NDR_convert__int_rep__int32_t((int32_t *)(a), f) | |||
#endif /* defined(__NDR_convert__*__defined) */ | |||
#endif /* __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined */ | |||
#ifndef __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined | |||
#if defined(__NDR_convert__char_rep__JackRPCEngine__int__defined) | |||
#define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined | |||
@@ -1483,6 +1504,26 @@ mig_internal novalue _Xrpc_jack_client_close | |||
#endif /* defined(__NDR_convert__*__defined) */ | |||
#endif /* __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined */ | |||
#ifndef __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#if defined(__NDR_convert__char_rep__JackRPCEngine__int__defined) | |||
#define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
__NDR_convert__char_rep__JackRPCEngine__int((int *)(a), f) | |||
#elif defined(__NDR_convert__char_rep__int__defined) | |||
#define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
__NDR_convert__char_rep__int((int *)(a), f) | |||
#elif defined(__NDR_convert__char_rep__JackRPCEngine__int32_t__defined) | |||
#define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
__NDR_convert__char_rep__JackRPCEngine__int32_t((int32_t *)(a), f) | |||
#elif defined(__NDR_convert__char_rep__int32_t__defined) | |||
#define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#define __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
__NDR_convert__char_rep__int32_t((int32_t *)(a), f) | |||
#endif /* defined(__NDR_convert__*__defined) */ | |||
#endif /* __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined */ | |||
#ifndef __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined | |||
#if defined(__NDR_convert__float_rep__JackRPCEngine__int__defined) | |||
#define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined | |||
@@ -1503,6 +1544,26 @@ mig_internal novalue _Xrpc_jack_client_close | |||
#endif /* defined(__NDR_convert__*__defined) */ | |||
#endif /* __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined */ | |||
#ifndef __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#if defined(__NDR_convert__float_rep__JackRPCEngine__int__defined) | |||
#define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
__NDR_convert__float_rep__JackRPCEngine__int((int *)(a), f) | |||
#elif defined(__NDR_convert__float_rep__int__defined) | |||
#define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
__NDR_convert__float_rep__int((int *)(a), f) | |||
#elif defined(__NDR_convert__float_rep__JackRPCEngine__int32_t__defined) | |||
#define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
__NDR_convert__float_rep__JackRPCEngine__int32_t((int32_t *)(a), f) | |||
#elif defined(__NDR_convert__float_rep__int32_t__defined) | |||
#define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined | |||
#define __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state(a, f) \ | |||
__NDR_convert__float_rep__int32_t((int32_t *)(a), f) | |||
#endif /* defined(__NDR_convert__*__defined) */ | |||
#endif /* __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined */ | |||
mig_internal kern_return_t __MIG_check__Request__rpc_jack_client_activate_t(__attribute__((__unused__)) __Request__rpc_jack_client_activate_t *In0P) | |||
{ | |||
@@ -1514,27 +1575,39 @@ mig_internal kern_return_t __MIG_check__Request__rpc_jack_client_activate_t(__at | |||
return MIG_BAD_ARGUMENTS; | |||
#endif /* __MigTypeCheck */ | |||
#if defined(__NDR_convert__int_rep__Request__rpc_jack_client_activate_t__refnum__defined) | |||
#if defined(__NDR_convert__int_rep__Request__rpc_jack_client_activate_t__refnum__defined) || \ | |||
defined(__NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined) | |||
if (In0P->NDR.int_rep != NDR_record.int_rep) { | |||
#if defined(__NDR_convert__int_rep__Request__rpc_jack_client_activate_t__refnum__defined) | |||
__NDR_convert__int_rep__Request__rpc_jack_client_activate_t__refnum(&In0P->refnum, In0P->NDR.int_rep); | |||
#endif /* __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__refnum__defined */ | |||
#if defined(__NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined) | |||
__NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state(&In0P->state, In0P->NDR.int_rep); | |||
#endif /* __NDR_convert__int_rep__Request__rpc_jack_client_activate_t__state__defined */ | |||
} | |||
#endif /* defined(__NDR_convert__int_rep...) */ | |||
#if defined(__NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined) | |||
#if defined(__NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined) || \ | |||
defined(__NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined) | |||
if (In0P->NDR.char_rep != NDR_record.char_rep) { | |||
#if defined(__NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined) | |||
__NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum(&In0P->refnum, In0P->NDR.char_rep); | |||
#endif /* __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__refnum__defined */ | |||
#if defined(__NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined) | |||
__NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state(&In0P->state, In0P->NDR.char_rep); | |||
#endif /* __NDR_convert__char_rep__Request__rpc_jack_client_activate_t__state__defined */ | |||
} | |||
#endif /* defined(__NDR_convert__char_rep...) */ | |||
#if defined(__NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined) | |||
#if defined(__NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined) || \ | |||
defined(__NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined) | |||
if (In0P->NDR.float_rep != NDR_record.float_rep) { | |||
#if defined(__NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined) | |||
__NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum(&In0P->refnum, In0P->NDR.float_rep); | |||
#endif /* __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__refnum__defined */ | |||
#if defined(__NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined) | |||
__NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state(&In0P->state, In0P->NDR.float_rep); | |||
#endif /* __NDR_convert__float_rep__Request__rpc_jack_client_activate_t__state__defined */ | |||
} | |||
#endif /* defined(__NDR_convert__float_rep...) */ | |||
@@ -1555,6 +1628,7 @@ kern_return_t server_rpc_jack_client_activate | |||
( | |||
mach_port_t server_port, | |||
int refnum, | |||
int state, | |||
int *result | |||
); | |||
@@ -1570,6 +1644,7 @@ mig_internal novalue _Xrpc_jack_client_activate | |||
mach_msg_header_t Head; | |||
NDR_record_t NDR; | |||
int refnum; | |||
int state; | |||
mach_msg_trailer_t trailer; | |||
} Request; | |||
#ifdef __MigPackStructs | |||
@@ -1601,7 +1676,7 @@ mig_internal novalue _Xrpc_jack_client_activate | |||
{ MIG_RETURN_ERROR(OutP, check_result); } | |||
#endif /* defined(__MIG_check__Request__rpc_jack_client_activate_t__defined) */ | |||
OutP->RetCode = server_rpc_jack_client_activate(In0P->Head.msgh_request_port, In0P->refnum, &OutP->result); | |||
OutP->RetCode = server_rpc_jack_client_activate(In0P->Head.msgh_request_port, In0P->refnum, In0P->state, &OutP->result); | |||
if (OutP->RetCode != KERN_SUCCESS) { | |||
MIG_RETURN_ERROR(OutP, OutP->RetCode); | |||
} | |||
@@ -6129,7 +6204,7 @@ const struct server_JackRPCEngine_subsystem { | |||
{ (mig_impl_routine_t) 0, | |||
(mig_stub_routine_t) _Xrpc_jack_client_close, 3, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__rpc_jack_client_close_t)}, | |||
{ (mig_impl_routine_t) 0, | |||
(mig_stub_routine_t) _Xrpc_jack_client_activate, 3, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__rpc_jack_client_activate_t)}, | |||
(mig_stub_routine_t) _Xrpc_jack_client_activate, 4, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__rpc_jack_client_activate_t)}, | |||
{ (mig_impl_routine_t) 0, | |||
(mig_stub_routine_t) _Xrpc_jack_client_deactivate, 3, 0, (routine_arg_descriptor_t)0, (mach_msg_size_t)sizeof(__Reply__rpc_jack_client_deactivate_t)}, | |||
{ (mig_impl_routine_t) 0, | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* IDENTIFICATION: | |||
* stub generated Mon Jan 28 15:04:07 2008 | |||
* with a MiG generated Sun Sep 23 15:44:06 PDT 2007 by root@hoosier.apple.com | |||
* stub generated Fri May 16 09:21:56 2008 | |||
* with a MiG generated Tue Feb 19 02:01:43 PST 2008 by root@b75.local | |||
* OPTIONS: | |||
*/ | |||
#define __MIG_check__Reply__JackRPCEngine_subsystem__ 1 | |||
@@ -1425,6 +1425,7 @@ mig_external kern_return_t rpc_jack_client_activate | |||
( | |||
mach_port_t server_port, | |||
int refnum, | |||
int state, | |||
int *result | |||
) | |||
{ | |||
@@ -1436,6 +1437,7 @@ mig_external kern_return_t rpc_jack_client_activate | |||
mach_msg_header_t Head; | |||
NDR_record_t NDR; | |||
int refnum; | |||
int state; | |||
} Request; | |||
#ifdef __MigPackStructs | |||
#pragma pack() | |||
@@ -1495,6 +1497,8 @@ mig_external kern_return_t rpc_jack_client_activate | |||
InP->refnum = refnum; | |||
InP->state = state; | |||
InP->Head.msgh_bits = | |||
MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE); | |||
/* msgh_size passed as argument */ | |||
@@ -22,7 +22,7 @@ | |||
#include <stdlib.h> | |||
#include <stdio.h> | |||
#include <math.h> | |||
#include <math.h> | |||
#include <jack/jack.h> | |||
#ifdef WIN32 | |||
#define M_PI 3.141562653 | |||
@@ -181,8 +181,7 @@ static int jack_callback (jack_nframes_t nframes, void *arg) | |||
int main (int ac, char *av []) | |||
{ | |||
int i, k; | |||
const char** ports; | |||
const char** ports; | |||
if ((jack_handle = jack_client_new ("jdelay")) == 0) | |||
{ | |||
@@ -168,9 +168,9 @@ void JackWinNamedPipeClientChannel::ClientClose(int refnum, int* result) | |||
ServerSyncCall(&req, &res, result); | |||
} | |||
void JackWinNamedPipeClientChannel::ClientActivate(int refnum, int* result) | |||
void JackWinNamedPipeClientChannel::ClientActivate(int refnum, int state, int* result) | |||
{ | |||
JackActivateRequest req(refnum); | |||
JackActivateRequest req(refnum, state); | |||
JackResult res; | |||
ServerSyncCall(&req, &res, result); | |||
} | |||
@@ -62,7 +62,7 @@ class JackWinNamedPipeClientChannel : public JackClientChannelInterface, public | |||
void ClientOpen(const char* name, int* shared_engine, int* shared_client, int* shared_graph, int* result); | |||
void ClientClose(int refnum, int* result); | |||
void ClientActivate(int refnum, int* result); | |||
void ClientActivate(int refnum, int state, int* result); | |||
void ClientDeactivate(int refnum, int* result); | |||
void PortRegister(int refnum, const char* name, const char* type, unsigned int flags, unsigned int buffer_size, unsigned int* port_index, int* result); | |||
@@ -144,7 +144,7 @@ int JackClientPipeThread::HandleRequest() | |||
JackResult res; | |||
jack_log("JackRequest::ActivateClient"); | |||
if (req.Read(fPipe) == 0) | |||
res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum); | |||
res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum, req.fState); | |||
res.Write(fPipe); | |||
break; | |||
} | |||