diff --git a/ChangeLog b/ChangeLog index a907d1fe..0db40665 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,7 +20,11 @@ Fernando Lopez-Lezcano Jackdmp changes log --------------------------- -2008-05-13 Stephane Letz +2008-05-16 Stephane Letz + + * 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 * Fix JackEngine::Close to only delete "loadable" clients. diff --git a/common/JackChannel.h b/common/JackChannel.h index b7a4fea4..c135cb11 100644 --- a/common/JackChannel.h +++ b/common/JackChannel.h @@ -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) {} diff --git a/common/JackClient.cpp b/common/JackClient.cpp index 97c00c81..6ada2e2e 100644 --- a/common/JackClient.cpp +++ b/common/JackClient.cpp @@ -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; } diff --git a/common/JackConstants.h b/common/JackConstants.h index 6eba6132..209b30a0 100644 --- a/common/JackConstants.h +++ b/common/JackConstants.h @@ -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 diff --git a/common/JackEngine.cpp b/common/JackEngine.cpp index 7b3abf28..52ccd4ca 100644 --- a/common/JackEngine.cpp +++ b/common/JackEngine.cpp @@ -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); diff --git a/common/JackEngine.h b/common/JackEngine.h index 09d3b296..83dca5b7 100644 --- a/common/JackEngine.h +++ b/common/JackEngine.h @@ -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 diff --git a/common/JackInternalClientChannel.h b/common/JackInternalClientChannel.h index 00c18e5d..0f613ae8 100644 --- a/common/JackInternalClientChannel.h +++ b/common/JackInternalClientChannel.h @@ -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) { diff --git a/common/JackLibClient.cpp b/common/JackLibClient.cpp index 9e763d5d..253c17fb 100644 --- a/common/JackLibClient.cpp +++ b/common/JackLibClient.cpp @@ -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); diff --git a/common/JackLockedEngine.h b/common/JackLockedEngine.h index 99afb080..f76952f3 100644 --- a/common/JackLockedEngine.h +++ b/common/JackLockedEngine.h @@ -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) { diff --git a/common/JackNotification.h b/common/JackNotification.h index e313bf48..f10b0ffa 100644 --- a/common/JackNotification.h +++ b/common/JackNotification.h @@ -35,7 +35,8 @@ enum NotificationType { kPortRegistrationOffCallback = 9, kPortConnectCallback = 10, kPortDisconnectCallback = 11, - kDeadClient = 12, + kRealTimeCallback = 12, + kDeadClient = 13, kMaxNotification }; diff --git a/common/JackRequest.h b/common/JackRequest.h index 08283124..9f85ae4e 100644 --- a/common/JackRequest.h +++ b/common/JackRequest.h @@ -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)); } }; diff --git a/common/JackSocketClientChannel.cpp b/common/JackSocketClientChannel.cpp index b79931d4..822f7e77 100644 --- a/common/JackSocketClientChannel.cpp +++ b/common/JackSocketClientChannel.cpp @@ -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); } diff --git a/common/JackSocketClientChannel.h b/common/JackSocketClientChannel.h index da78a863..7086b6da 100644 --- a/common/JackSocketClientChannel.h +++ b/common/JackSocketClientChannel.h @@ -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); diff --git a/common/JackSocketServerChannel.cpp b/common/JackSocketServerChannel.cpp index a510c2aa..1f91f98f 100644 --- a/common/JackSocketServerChannel.cpp +++ b/common/JackSocketServerChannel.cpp @@ -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; diff --git a/common/JackTransportEngine.cpp b/common/JackTransportEngine.cpp index dfca076d..42b8442a 100644 --- a/common/JackTransportEngine.cpp +++ b/common/JackTransportEngine.cpp @@ -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; } diff --git a/macosx/JackMacEngineRPC.cpp b/macosx/JackMacEngineRPC.cpp index b69a10c9..da20189b 100644 --- a/macosx/JackMacEngineRPC.cpp +++ b/macosx/JackMacEngineRPC.cpp @@ -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; } diff --git a/macosx/JackMachClientChannel.cpp b/macosx/JackMachClientChannel.cpp index 365a9494..cb4a4cde 100644 --- a/macosx/JackMachClientChannel.cpp +++ b/macosx/JackMachClientChannel.cpp @@ -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)); diff --git a/macosx/JackMachClientChannel.h b/macosx/JackMachClientChannel.h index 33bc8def..5c1d196a 100644 --- a/macosx/JackMachClientChannel.h +++ b/macosx/JackMachClientChannel.h @@ -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); diff --git a/macosx/Jackdmp.xcodeproj/project.pbxproj b/macosx/Jackdmp.xcodeproj/project.pbxproj index 81a68b7d..7d09f49d 100644 --- a/macosx/Jackdmp.xcodeproj/project.pbxproj +++ b/macosx/Jackdmp.xcodeproj/project.pbxproj @@ -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 = ""; @@ -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 */ = { diff --git a/macosx/RPC/JackRPCClientServer.c b/macosx/RPC/JackRPCClientServer.c index 8f134bf8..4ba929a0 100644 --- a/macosx/RPC/JackRPCClientServer.c +++ b/macosx/RPC/JackRPCClientServer.c @@ -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: */ diff --git a/macosx/RPC/JackRPCClientUser.c b/macosx/RPC/JackRPCClientUser.c index fc7f13b9..1898b5ad 100644 --- a/macosx/RPC/JackRPCClientUser.c +++ b/macosx/RPC/JackRPCClientUser.c @@ -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 diff --git a/macosx/RPC/JackRPCEngine.defs b/macosx/RPC/JackRPCEngine.defs index 10caee8e..b798a580 100644 --- a/macosx/RPC/JackRPCEngine.defs +++ b/macosx/RPC/JackRPCEngine.defs @@ -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( diff --git a/macosx/RPC/JackRPCEngine.h b/macosx/RPC/JackRPCEngine.h index cf677678..c82bf6e2 100644 --- a/macosx/RPC/JackRPCEngine.h +++ b/macosx/RPC/JackRPCEngine.h @@ -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() diff --git a/macosx/RPC/JackRPCEngineServer.c b/macosx/RPC/JackRPCEngineServer.c index 3c8b2ae6..321fe68f 100644 --- a/macosx/RPC/JackRPCEngineServer.c +++ b/macosx/RPC/JackRPCEngineServer.c @@ -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, diff --git a/macosx/RPC/JackRPCEngineUser.c b/macosx/RPC/JackRPCEngineUser.c index a72d3310..15daf49f 100644 --- a/macosx/RPC/JackRPCEngineUser.c +++ b/macosx/RPC/JackRPCEngineUser.c @@ -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 */ diff --git a/tests/jdelay.cpp b/tests/jdelay.cpp index 2fb3d304..317ea091 100644 --- a/tests/jdelay.cpp +++ b/tests/jdelay.cpp @@ -22,7 +22,7 @@ #include #include -#include +#include #include #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) { diff --git a/windows/JackWinNamedPipeClientChannel.cpp b/windows/JackWinNamedPipeClientChannel.cpp index bdee81e6..4fa593d9 100644 --- a/windows/JackWinNamedPipeClientChannel.cpp +++ b/windows/JackWinNamedPipeClientChannel.cpp @@ -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); } diff --git a/windows/JackWinNamedPipeClientChannel.h b/windows/JackWinNamedPipeClientChannel.h index c14fc1db..852114be 100644 --- a/windows/JackWinNamedPipeClientChannel.h +++ b/windows/JackWinNamedPipeClientChannel.h @@ -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); diff --git a/windows/JackWinNamedPipeServerChannel.cpp b/windows/JackWinNamedPipeServerChannel.cpp index 64e27ea0..9d07b895 100644 --- a/windows/JackWinNamedPipeServerChannel.cpp +++ b/windows/JackWinNamedPipeServerChannel.cpp @@ -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; }