git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4697 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.9.9.5
@@ -36,9 +36,13 @@ John Emmas | |||
Jackdmp changes log | |||
--------------------------- | |||
2012-01-13 Stephane Letz <letz@grame.fr> | |||
* More robust server/client protocol. | |||
2012-01-11 Stephane Letz <letz@grame.fr> | |||
* Factorize code the server/client request. | |||
* Factorize code the server/client request in JackRequestDecoder class. | |||
2012-01-06 Stephane Letz <letz@grame.fr> | |||
@@ -157,7 +157,7 @@ bool JackEngine::Process(jack_time_t cur_cycle_begin, jack_time_t prev_cycle_end | |||
// Cycle begin | |||
fEngineControl->CycleBegin(fClientTable, fGraphManager, cur_cycle_begin, prev_cycle_end); | |||
// Graph | |||
if (fGraphManager->IsFinishedGraph()) { | |||
ProcessNext(cur_cycle_begin); | |||
@@ -1000,7 +1000,7 @@ void JackEngine::SessionNotify(int refnum, const char *target, jack_session_even | |||
} | |||
} | |||
void JackEngine::SessionReply(int refnum) | |||
int JackEngine::SessionReply(int refnum) | |||
{ | |||
JackClientInterface* client = fClientTable[refnum]; | |||
char uuid_buf[JACK_UUID_SIZE]; | |||
@@ -1019,72 +1019,73 @@ void JackEngine::SessionReply(int refnum) | |||
} | |||
fSessionResult = NULL; | |||
} | |||
return 0; | |||
} | |||
void JackEngine::GetUUIDForClientName(const char *client_name, char *uuid_res, int *result) | |||
int JackEngine::GetUUIDForClientName(const char *client_name, char *uuid_res) | |||
{ | |||
for (int i = 0; i < CLIENT_NUM; i++) { | |||
JackClientInterface* client = fClientTable[i]; | |||
if (client && (strcmp(client_name, client->GetClientControl()->fName) == 0)) { | |||
snprintf(uuid_res, JACK_UUID_SIZE, "%d", client->GetClientControl()->fSessionID); | |||
*result = 0; | |||
return; | |||
return 0; | |||
} | |||
} | |||
// Did not find name. | |||
*result = -1; | |||
return -1; | |||
} | |||
void JackEngine::GetClientNameForUUID(const char *uuid, char *name_res, int *result) | |||
int JackEngine::GetClientNameForUUID(const char *uuid, char *name_res) | |||
{ | |||
for (int i = 0; i < CLIENT_NUM; i++) { | |||
JackClientInterface* client = fClientTable[i]; | |||
if (!client) | |||
if (!client) { | |||
continue; | |||
} | |||
char uuid_buf[JACK_UUID_SIZE]; | |||
snprintf(uuid_buf, JACK_UUID_SIZE, "%d", client->GetClientControl()->fSessionID); | |||
if (strcmp(uuid,uuid_buf) == 0) { | |||
strncpy(name_res, client->GetClientControl()->fName, JACK_CLIENT_NAME_SIZE); | |||
*result = 0; | |||
return; | |||
return 0; | |||
} | |||
} | |||
// Did not find uuid. | |||
*result = -1; | |||
return -1; | |||
} | |||
void JackEngine::ReserveClientName(const char *name, const char *uuid, int *result) | |||
int JackEngine::ReserveClientName(const char *name, const char *uuid) | |||
{ | |||
jack_log("JackEngine::ReserveClientName ( name = %s, uuid = %s )", name, uuid); | |||
if (ClientCheckName(name)) { | |||
*result = -1; | |||
jack_log("name already taken"); | |||
return; | |||
return -1; | |||
} | |||
EnsureUUID(atoi(uuid)); | |||
fReservationMap[atoi(uuid)] = name; | |||
*result = 0; | |||
return 0; | |||
} | |||
void JackEngine::ClientHasSessionCallback(const char *name, int *result) | |||
int JackEngine::ClientHasSessionCallback(const char *name) | |||
{ | |||
JackClientInterface* client = NULL; | |||
for (int i = 0; i < CLIENT_NUM; i++) { | |||
client = fClientTable[i]; | |||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) | |||
if (client && (strcmp(client->GetClientControl()->fName, name) == 0)) { | |||
break; | |||
} | |||
} | |||
if (client) { | |||
*result = client->GetClientControl()->fCallback[kSessionCallback]; | |||
return client->GetClientControl()->fCallback[kSessionCallback]; | |||
} else { | |||
*result = -1; | |||
return -1; | |||
} | |||
} | |||
@@ -148,12 +148,12 @@ class SERVER_EXPORT JackEngine : public JackLockAble | |||
// Session management | |||
void SessionNotify(int refnum, const char *target, jack_session_event_type_t type, const char *path, detail::JackChannelTransactionInterface *socket, JackSessionNotifyResult** result); | |||
void SessionReply(int refnum); | |||
int SessionReply(int refnum); | |||
void GetUUIDForClientName(const char *client_name, char *uuid_res, int *result); | |||
void GetClientNameForUUID(const char *uuid, char *name_res, int *result); | |||
void ReserveClientName(const char *name, const char *uuid, int *result); | |||
void ClientHasSessionCallback(const char *name, int *result); | |||
int GetUUIDForClientName(const char *client_name, char *uuid_res); | |||
int GetClientNameForUUID(const char *uuid, char *name_res); | |||
int ReserveClientName(const char *name, const char *uuid); | |||
int ClientHasSessionCallback(const char *name); | |||
}; | |||
@@ -142,8 +142,7 @@ class JackInternalClientChannel : public detail::JackClientChannelInterface | |||
{ | |||
JackSessionNotifyResult* res; | |||
fEngine->SessionNotify(refnum, target, type, path, NULL, &res); | |||
if (res == NULL) | |||
{ | |||
if (res == NULL) { | |||
*result = NULL; | |||
return; | |||
} | |||
@@ -154,28 +153,27 @@ class JackInternalClientChannel : public detail::JackClientChannelInterface | |||
void SessionReply(int refnum, int* result) | |||
{ | |||
fEngine->SessionReply(refnum); | |||
*result = 0; | |||
*result = fEngine->SessionReply(refnum); | |||
} | |||
void GetUUIDForClientName(int refnum, const char* client_name, char* uuid_res, int* result) | |||
{ | |||
fEngine->GetUUIDForClientName(client_name, uuid_res, result); | |||
*result = fEngine->GetUUIDForClientName(client_name, uuid_res); | |||
} | |||
void GetClientNameForUUID(int refnum, const char* uuid, char* name_res, int* result) | |||
{ | |||
fEngine->GetClientNameForUUID(uuid, name_res, result); | |||
*result = fEngine->GetClientNameForUUID(uuid, name_res); | |||
} | |||
void ReserveClientName(int refnum, const char* client_name, const char *uuid, int* result) | |||
{ | |||
fEngine->ReserveClientName(client_name, uuid, result); | |||
*result = fEngine->ReserveClientName(client_name, uuid); | |||
} | |||
void ClientHasSessionCallback(const char* client_name, int* result) | |||
{ | |||
fEngine->ClientHasSessionCallback(client_name, result); | |||
*result = fEngine->ClientHasSessionCallback(client_name); | |||
} | |||
@@ -333,42 +333,42 @@ class SERVER_EXPORT JackLockedEngine | |||
CATCH_EXCEPTION | |||
} | |||
void SessionReply(int refnum) | |||
int SessionReply(int refnum) | |||
{ | |||
TRY_CALL | |||
JackLock lock(&fEngine); | |||
fEngine.SessionReply(refnum); | |||
CATCH_EXCEPTION | |||
return fEngine.SessionReply(refnum); | |||
CATCH_EXCEPTION_RETURN | |||
} | |||
void GetUUIDForClientName(const char *client_name, char *uuid_res, int *result) | |||
int GetUUIDForClientName(const char *client_name, char *uuid_res) | |||
{ | |||
TRY_CALL | |||
JackLock lock(&fEngine); | |||
fEngine.GetUUIDForClientName(client_name, uuid_res, result); | |||
CATCH_EXCEPTION | |||
return fEngine.GetUUIDForClientName(client_name, uuid_res); | |||
CATCH_EXCEPTION_RETURN | |||
} | |||
void GetClientNameForUUID(const char *uuid, char *name_res, int *result) | |||
int GetClientNameForUUID(const char *uuid, char *name_res) | |||
{ | |||
TRY_CALL | |||
JackLock lock(&fEngine); | |||
fEngine.GetClientNameForUUID(uuid, name_res, result); | |||
CATCH_EXCEPTION | |||
return fEngine.GetClientNameForUUID(uuid, name_res); | |||
CATCH_EXCEPTION_RETURN | |||
} | |||
void ReserveClientName(const char *name, const char *uuid, int *result) | |||
int ReserveClientName(const char *name, const char *uuid) | |||
{ | |||
TRY_CALL | |||
JackLock lock(&fEngine); | |||
fEngine.ReserveClientName(name, uuid, result); | |||
CATCH_EXCEPTION | |||
return fEngine.ReserveClientName(name, uuid); | |||
CATCH_EXCEPTION_RETURN | |||
} | |||
void ClientHasSessionCallback(const char *name, int *result) | |||
int ClientHasSessionCallback(const char *name) | |||
{ | |||
TRY_CALL | |||
JackLock lock(&fEngine); | |||
fEngine.ClientHasSessionCallback(name, result); | |||
CATCH_EXCEPTION | |||
return fEngine.ClientHasSessionCallback(name); | |||
CATCH_EXCEPTION_RETURN | |||
} | |||
}; | |||
@@ -22,6 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
#define __JackRequest__ | |||
#include "JackConstants.h" | |||
#include "JackError.h" | |||
#include "JackPlatformPlug.h" | |||
#include "JackChannel.h" | |||
#include "JackTime.h" | |||
@@ -34,7 +35,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
namespace Jack | |||
{ | |||
#define CheckRes(exp) { if ((exp) < 0) return -1; } | |||
#define CheckRes(exp) { if ((exp) < 0) { jack_error("CheckRes error"); return -1; } } | |||
#define CheckSize() { CheckRes(trans->Read(&fSize, sizeof(int))); if (fSize != Size()) { jack_error("CheckSize error size = %d Size() = %d", fSize, Size()); return -1; } } | |||
/*! | |||
\brief Session API constants. | |||
@@ -91,11 +93,12 @@ struct JackRequest | |||
}; | |||
RequestType fType; | |||
int fSize; | |||
JackRequest(): fType((RequestType)0) | |||
JackRequest(): fType((RequestType)0), fSize(0) | |||
{} | |||
JackRequest(RequestType type): fType(type) | |||
JackRequest(RequestType type): fType(type), fSize(0) | |||
{} | |||
virtual ~JackRequest() | |||
@@ -106,10 +109,16 @@ struct JackRequest | |||
return trans->Read(&fType, sizeof(RequestType)); | |||
} | |||
virtual int Write(detail::JackChannelTransactionInterface* trans) | |||
virtual int Write(detail::JackChannelTransactionInterface* trans) { return -1; } | |||
virtual int Write(detail::JackChannelTransactionInterface* trans, int size) | |||
{ | |||
return trans->Write(&fType, sizeof(RequestType)); | |||
fSize = size; | |||
CheckRes(trans->Write(&fType, sizeof(RequestType))); | |||
return trans->Write(&fSize, sizeof(int)); | |||
} | |||
virtual int Size() { return 0; } | |||
}; | |||
@@ -164,6 +173,7 @@ struct JackClientCheckRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fName, sizeof(fName))); | |||
CheckRes(trans->Read(&fProtocol, sizeof(int))); | |||
CheckRes(trans->Read(&fOptions, sizeof(int))); | |||
@@ -173,13 +183,15 @@ struct JackClientCheckRequest : public JackRequest | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fName, sizeof(fName))); | |||
CheckRes(trans->Write(&fProtocol, sizeof(int))); | |||
CheckRes(trans->Write(&fOptions, sizeof(int))); | |||
CheckRes(trans->Write(&fUUID, sizeof(int))); | |||
return trans->Write(&fOpen, sizeof(int)); | |||
} | |||
int Size() { return sizeof(fName) + 4 * sizeof(int); } | |||
}; | |||
@@ -241,6 +253,7 @@ struct JackClientOpenRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fPID, sizeof(int))); | |||
CheckRes(trans->Read(&fUUID, sizeof(int))); | |||
return trans->Read(&fName, sizeof(fName)); | |||
@@ -248,12 +261,14 @@ struct JackClientOpenRequest : public JackRequest | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fPID, sizeof(int))); | |||
CheckRes(trans->Write(&fUUID, sizeof(int))); | |||
return trans->Write(&fName, sizeof(fName)); | |||
} | |||
int Size() { return 2 * sizeof(int) + sizeof(fName); } | |||
}; | |||
/*! | |||
@@ -310,15 +325,17 @@ struct JackClientCloseRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
return trans->Read(&fRefNum, sizeof(int)); | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
return trans->Write(&fRefNum, sizeof(int)); | |||
} | |||
int Size() { return sizeof(int); } | |||
}; | |||
/*! | |||
@@ -339,17 +356,19 @@ struct JackActivateRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
return trans->Read(&fIsRealTime, sizeof(int)); | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
return trans->Write(&fIsRealTime, sizeof(int)); | |||
} | |||
int Size() { return 2 * sizeof(int); } | |||
}; | |||
/*! | |||
@@ -368,15 +387,17 @@ struct JackDeactivateRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
return trans->Read(&fRefNum, sizeof(int)); | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
return trans->Write(&fRefNum, sizeof(int)); | |||
} | |||
int Size() { return sizeof(int); } | |||
}; | |||
/*! | |||
@@ -403,6 +424,7 @@ struct JackPortRegisterRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Read(&fName, sizeof(fName))); | |||
CheckRes(trans->Read(&fPortType, sizeof(fPortType))); | |||
@@ -413,7 +435,7 @@ struct JackPortRegisterRequest : public JackRequest | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Write(&fName, sizeof(fName))); | |||
CheckRes(trans->Write(&fPortType, sizeof(fPortType))); | |||
@@ -421,6 +443,8 @@ struct JackPortRegisterRequest : public JackRequest | |||
CheckRes(trans->Write(&fBufferSize, sizeof(unsigned int))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(int) + sizeof(fName) + sizeof(fPortType) + 2 * sizeof(unsigned int); } | |||
}; | |||
@@ -468,6 +492,7 @@ struct JackPortUnRegisterRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Read(&fPortIndex, sizeof(jack_port_id_t))); | |||
return 0; | |||
@@ -475,12 +500,13 @@ struct JackPortUnRegisterRequest : public JackRequest | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Write(&fPortIndex, sizeof(jack_port_id_t))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(int) + sizeof(jack_port_id_t); } | |||
}; | |||
/*! | |||
@@ -505,21 +531,23 @@ struct JackPortConnectNameRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Read(&fSrc, sizeof(fSrc))); | |||
CheckRes(trans->Read(&fDst, sizeof(fDst))); | |||
return 0; | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Write(&fSrc, sizeof(fSrc))); | |||
CheckRes(trans->Write(&fDst, sizeof(fDst))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(int) + sizeof(fSrc) + sizeof(fDst); } | |||
}; | |||
@@ -545,6 +573,7 @@ struct JackPortDisconnectNameRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Read(&fSrc, sizeof(fSrc))); | |||
CheckRes(trans->Read(&fDst, sizeof(fDst))); | |||
@@ -553,13 +582,15 @@ struct JackPortDisconnectNameRequest : public JackRequest | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Write(&fSrc, sizeof(fSrc))); | |||
CheckRes(trans->Write(&fDst, sizeof(fDst))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(int) + sizeof(fSrc) + sizeof(fDst); } | |||
}; | |||
/*! | |||
@@ -581,6 +612,7 @@ struct JackPortConnectRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Read(&fSrc, sizeof(jack_port_id_t))); | |||
CheckRes(trans->Read(&fDst, sizeof(jack_port_id_t))); | |||
@@ -589,13 +621,14 @@ struct JackPortConnectRequest : public JackRequest | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Write(&fSrc, sizeof(jack_port_id_t))); | |||
CheckRes(trans->Write(&fDst, sizeof(jack_port_id_t))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(int) + sizeof(jack_port_id_t) + sizeof(jack_port_id_t); } | |||
}; | |||
/*! | |||
@@ -617,6 +650,7 @@ struct JackPortDisconnectRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Read(&fSrc, sizeof(jack_port_id_t))); | |||
CheckRes(trans->Read(&fDst, sizeof(jack_port_id_t))); | |||
@@ -625,13 +659,14 @@ struct JackPortDisconnectRequest : public JackRequest | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Write(&fSrc, sizeof(jack_port_id_t))); | |||
CheckRes(trans->Write(&fDst, sizeof(jack_port_id_t))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(int) + sizeof(jack_port_id_t) + sizeof(jack_port_id_t); } | |||
}; | |||
/*! | |||
@@ -655,6 +690,7 @@ struct JackPortRenameRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Read(&fPort, sizeof(jack_port_id_t))); | |||
CheckRes(trans->Read(&fName, sizeof(fName))); | |||
@@ -663,13 +699,14 @@ struct JackPortRenameRequest : public JackRequest | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Write(&fPort, sizeof(jack_port_id_t))); | |||
CheckRes(trans->Write(&fName, sizeof(fName))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(int) + sizeof(jack_port_id_t) + sizeof(fName); } | |||
}; | |||
@@ -690,15 +727,17 @@ struct JackSetBufferSizeRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
return trans->Read(&fBufferSize, sizeof(jack_nframes_t)); | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
return trans->Write(&fBufferSize, sizeof(jack_nframes_t)); | |||
} | |||
int Size() { return sizeof(jack_nframes_t); } | |||
}; | |||
/*! | |||
@@ -718,14 +757,17 @@ struct JackSetFreeWheelRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
return trans->Read(&fOnOff, sizeof(int)); | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
return trans->Write(&fOnOff, sizeof(int)); | |||
} | |||
int Size() { return sizeof(int); } | |||
}; | |||
@@ -742,15 +784,17 @@ struct JackComputeTotalLatenciesRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
return 0; | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
return 0; | |||
} | |||
int Size() { return 0; } | |||
}; | |||
/*! | |||
@@ -770,14 +814,17 @@ struct JackReleaseTimebaseRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
return trans->Read(&fRefNum, sizeof(int)); | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
return trans->Write(&fRefNum, sizeof(int)); | |||
} | |||
int Size() { return sizeof(int); } | |||
}; | |||
@@ -799,17 +846,19 @@ struct JackSetTimebaseCallbackRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
return trans->Read(&fConditionnal, sizeof(int)); | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
return trans->Write(&fConditionnal, sizeof(int)); | |||
} | |||
int Size() { return sizeof(int) + sizeof(int); } | |||
}; | |||
/*! | |||
@@ -830,17 +879,19 @@ struct JackGetInternalClientNameRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
return trans->Read(&fIntRefNum, sizeof(int)); | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
return trans->Write(&fIntRefNum, sizeof(int)); | |||
} | |||
int Size() { return sizeof(int) + sizeof(int); } | |||
}; | |||
/*! | |||
@@ -874,6 +925,7 @@ struct JackGetInternalClientNameResult : public JackResult | |||
return 0; | |||
} | |||
int Size() { return sizeof(fName); } | |||
}; | |||
/*! | |||
@@ -896,17 +948,19 @@ struct JackInternalClientHandleRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
return trans->Read(&fName, sizeof(fName)); | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
return trans->Write(&fName, sizeof(fName)); | |||
} | |||
int Size() { return sizeof(int) + sizeof(fName); } | |||
}; | |||
/*! | |||
@@ -941,6 +995,7 @@ struct JackInternalClientHandleResult : public JackResult | |||
return 0; | |||
} | |||
int Size() { return sizeof(int) + sizeof(int); } | |||
}; | |||
/*! | |||
@@ -974,6 +1029,7 @@ struct JackInternalClientLoadRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Read(&fName, sizeof(fName))); | |||
CheckRes(trans->Read(&fDllName, sizeof(fDllName))); | |||
@@ -984,7 +1040,7 @@ struct JackInternalClientLoadRequest : public JackRequest | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Write(&fName, sizeof(fName))); | |||
CheckRes(trans->Write(&fDllName, sizeof(fDllName))); | |||
@@ -993,6 +1049,7 @@ struct JackInternalClientLoadRequest : public JackRequest | |||
return trans->Write(&fOptions, sizeof(int)); | |||
} | |||
int Size() { return sizeof(int) + sizeof(fName) + sizeof(fDllName) + sizeof(fLoadInitName) + 2 * sizeof(int); } | |||
}; | |||
/*! | |||
@@ -1027,6 +1084,7 @@ struct JackInternalClientLoadResult : public JackResult | |||
return 0; | |||
} | |||
int Size() { return sizeof(int) + sizeof(int); } | |||
}; | |||
/*! | |||
@@ -1047,16 +1105,19 @@ struct JackInternalClientUnloadRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
return trans->Read(&fIntRefNum, sizeof(int)); | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
return trans->Write(&fIntRefNum, sizeof(int)); | |||
} | |||
int Size() { return sizeof(int) + sizeof(int); } | |||
}; | |||
/*! | |||
@@ -1088,6 +1149,7 @@ struct JackInternalClientUnloadResult : public JackResult | |||
return 0; | |||
} | |||
int Size() { return sizeof(int); } | |||
}; | |||
/*! | |||
@@ -1109,6 +1171,7 @@ struct JackClientNotificationRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Read(&fNotify, sizeof(int))); | |||
CheckRes(trans->Read(&fValue, sizeof(int))); | |||
@@ -1117,12 +1180,14 @@ struct JackClientNotificationRequest : public JackRequest | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Write(&fNotify, sizeof(int))); | |||
CheckRes(trans->Write(&fValue, sizeof(int))); | |||
return 0; | |||
} | |||
int Size() { return 3 * sizeof(int); } | |||
}; | |||
@@ -1260,6 +1325,7 @@ struct JackSessionNotifyRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(fRefNum))); | |||
CheckRes(trans->Read(&fPath, sizeof(fPath))); | |||
CheckRes(trans->Read(&fDst, sizeof(fDst))); | |||
@@ -1269,7 +1335,7 @@ struct JackSessionNotifyRequest : public JackRequest | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(fRefNum))); | |||
CheckRes(trans->Write(&fPath, sizeof(fPath))); | |||
CheckRes(trans->Write(&fDst, sizeof(fDst))); | |||
@@ -1277,6 +1343,7 @@ struct JackSessionNotifyRequest : public JackRequest | |||
return 0; | |||
} | |||
int Size() { return sizeof(fRefNum) + sizeof(fPath) + sizeof(fDst) + sizeof(fEventType); } | |||
}; | |||
struct JackSessionReplyRequest : public JackRequest | |||
@@ -1292,17 +1359,20 @@ struct JackSessionReplyRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(trans->Read(&fRefNum, sizeof(fRefNum))); | |||
CheckSize(); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
return 0; | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(trans->Write(&fRefNum, sizeof(fRefNum))); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(int); } | |||
}; | |||
struct JackClientNameResult : public JackResult | |||
@@ -1330,7 +1400,7 @@ struct JackClientNameResult : public JackResult | |||
CheckRes(trans->Write(&fName, sizeof(fName))); | |||
return 0; | |||
} | |||
}; | |||
struct JackUUIDResult : public JackResult | |||
@@ -1376,17 +1446,20 @@ struct JackGetUUIDRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fName, sizeof(fName))); | |||
return 0; | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fName, sizeof(fName))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(fName); } | |||
}; | |||
struct JackGetClientNameRequest : public JackRequest | |||
@@ -1403,18 +1476,21 @@ struct JackGetClientNameRequest : public JackRequest | |||
} | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fUUID, sizeof(fUUID))); | |||
return 0; | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fUUID, sizeof(fUUID))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(fUUID); } | |||
}; | |||
struct JackReserveNameRequest : public JackRequest | |||
@@ -1435,6 +1511,7 @@ struct JackReserveNameRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fUUID, sizeof(fUUID))); | |||
CheckRes(trans->Read(&fName, sizeof(fName))); | |||
CheckRes(trans->Read(&fRefNum, sizeof(fRefNum))); | |||
@@ -1443,13 +1520,15 @@ struct JackReserveNameRequest : public JackRequest | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fUUID, sizeof(fUUID))); | |||
CheckRes(trans->Write(&fName, sizeof(fName))); | |||
CheckRes(trans->Write(&fRefNum, sizeof(fRefNum))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(fUUID) + sizeof(fName) + sizeof(fRefNum); } | |||
}; | |||
struct JackClientHasSessionCallbackRequest : public JackRequest | |||
@@ -1467,17 +1546,20 @@ struct JackClientHasSessionCallbackRequest : public JackRequest | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fName, sizeof(fName))); | |||
return 0; | |||
} | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(JackRequest::Write(trans)); | |||
CheckRes(JackRequest::Write(trans, Size())); | |||
CheckRes(trans->Write(&fName, sizeof(fName))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(fName); } | |||
}; | |||
/*! | |||
@@ -1486,6 +1568,7 @@ struct JackClientHasSessionCallbackRequest : public JackRequest | |||
struct JackClientNotification | |||
{ | |||
int fSize; | |||
char fName[JACK_CLIENT_NAME_SIZE + 1]; | |||
int fRefNum; | |||
int fNotify; | |||
@@ -1501,10 +1584,12 @@ struct JackClientNotification | |||
{ | |||
snprintf(fName, sizeof(fName), "%s", name); | |||
snprintf(fMessage, sizeof(fMessage), "%s", message); | |||
fSize = Size(); | |||
} | |||
int Read(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckSize(); | |||
CheckRes(trans->Read(&fName, sizeof(fName))); | |||
CheckRes(trans->Read(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Read(&fNotify, sizeof(int))); | |||
@@ -1517,6 +1602,7 @@ struct JackClientNotification | |||
int Write(detail::JackChannelTransactionInterface* trans) | |||
{ | |||
CheckRes(trans->Write(&fSize, sizeof(int))); | |||
CheckRes(trans->Write(&fName, sizeof(fName))); | |||
CheckRes(trans->Write(&fRefNum, sizeof(int))); | |||
CheckRes(trans->Write(&fNotify, sizeof(int))); | |||
@@ -1526,6 +1612,8 @@ struct JackClientNotification | |||
CheckRes(trans->Write(&fMessage, sizeof(fMessage))); | |||
return 0; | |||
} | |||
int Size() { return sizeof(int) + sizeof(fName) + 5 * sizeof(int) + sizeof(fMessage); } | |||
}; | |||
@@ -30,6 +30,11 @@ using namespace std; | |||
namespace Jack | |||
{ | |||
#define CheckRead(req, socket) { if (req.Read(socket) < 0) { jack_error("CheckRead error"); return -1; } } | |||
#define CheckWriteName(error, socket) { if (res.Write(socket) < 0) { jack_error("%s write error name = %s", error, req.fName); } } | |||
#define CheckWriteRefNum(error, socket) { if (res.Write(socket) < 0) { jack_error("%s write error ref = %d", error, req.fRefNum); } } | |||
#define CheckWrite(error, socket) { if (res.Write(socket) < 0) { jack_error("%s write error", error); } } | |||
JackRequestDecoder::JackRequestDecoder(JackServer* server, JackClientHandlerInterface* handler) | |||
:fServer(server), fHandler(handler) | |||
{} | |||
@@ -37,7 +42,7 @@ JackRequestDecoder::JackRequestDecoder(JackServer* server, JackClientHandlerInte | |||
JackRequestDecoder::~JackRequestDecoder() | |||
{} | |||
void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* socket, int type_aux) | |||
int JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* socket, int type_aux) | |||
{ | |||
JackRequest::RequestType type = (JackRequest::RequestType)type_aux; | |||
@@ -48,15 +53,14 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::ClientCheck"); | |||
JackClientCheckRequest req; | |||
JackClientCheckResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->ClientCheck(req.fName, req.fUUID, res.fName, req.fProtocol, req.fOptions, &res.fStatus); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::ClientCheck write error name = %s", req.fName); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->ClientCheck(req.fName, req.fUUID, res.fName, req.fProtocol, req.fOptions, &res.fStatus); | |||
CheckWriteName("JackRequest::ClientCheck", socket); | |||
// Atomic ClientCheck followed by ClientOpen on same socket | |||
if (req.fOpen) { | |||
JackRequest header; | |||
header.Read(socket); | |||
HandleRequest(socket, header.fType); | |||
return HandleRequest(socket, header.fType); | |||
} | |||
break; | |||
} | |||
@@ -65,10 +69,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::ClientOpen"); | |||
JackClientOpenRequest req; | |||
JackClientOpenResult res; | |||
if (req.Read(socket) == 0) | |||
fHandler->ClientAdd(socket, &req, &res); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::ClientOpen write error name = %s", req.fName); | |||
CheckRead(req, socket); | |||
fHandler->ClientAdd(socket, &req, &res); | |||
CheckWriteName("JackRequest::ClientOpen", socket); | |||
break; | |||
} | |||
@@ -76,10 +79,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::ClientClose"); | |||
JackClientCloseRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->ClientExternalClose(req.fRefNum); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::ClientClose write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->ClientExternalClose(req.fRefNum); | |||
CheckWriteRefNum("JackRequest::ClientClose", socket); | |||
fHandler->ClientRemove(socket, req.fRefNum); | |||
break; | |||
} | |||
@@ -88,10 +90,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
JackActivateRequest req; | |||
JackResult res; | |||
jack_log("JackRequest::ActivateClient"); | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum, req.fIsRealTime); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::ActivateClient write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->ClientActivate(req.fRefNum, req.fIsRealTime); | |||
CheckWriteRefNum("JackRequest::ActivateClient", socket); | |||
break; | |||
} | |||
@@ -99,10 +100,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::DeactivateClient"); | |||
JackDeactivateRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->ClientDeactivate(req.fRefNum); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::DeactivateClient write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->ClientDeactivate(req.fRefNum); | |||
CheckWriteRefNum("JackRequest::DeactivateClient", socket); | |||
break; | |||
} | |||
@@ -110,10 +110,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::RegisterPort"); | |||
JackPortRegisterRequest req; | |||
JackPortRegisterResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->PortRegister(req.fRefNum, req.fName, req.fPortType, req.fFlags, req.fBufferSize, &res.fPortIndex); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::RegisterPort write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->PortRegister(req.fRefNum, req.fName, req.fPortType, req.fFlags, req.fBufferSize, &res.fPortIndex); | |||
CheckWriteRefNum("JackRequest::RegisterPort", socket); | |||
break; | |||
} | |||
@@ -121,10 +120,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::UnRegisterPort"); | |||
JackPortUnRegisterRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->PortUnRegister(req.fRefNum, req.fPortIndex); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::UnRegisterPort write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->PortUnRegister(req.fRefNum, req.fPortIndex); | |||
CheckWriteRefNum("JackRequest::UnRegisterPort", socket); | |||
break; | |||
} | |||
@@ -132,10 +130,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::ConnectNamePorts"); | |||
JackPortConnectNameRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::ConnectNamePorts write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst); | |||
CheckWriteRefNum("JackRequest::ConnectNamePorts", socket); | |||
break; | |||
} | |||
@@ -143,10 +140,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::DisconnectNamePorts"); | |||
JackPortDisconnectNameRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::DisconnectNamePorts write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst); | |||
CheckWriteRefNum("JackRequest::DisconnectNamePorts", socket); | |||
break; | |||
} | |||
@@ -154,10 +150,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::ConnectPorts"); | |||
JackPortConnectRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::ConnectPorts write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->PortConnect(req.fRefNum, req.fSrc, req.fDst); | |||
CheckWriteRefNum("JackRequest::ConnectPorts", socket); | |||
break; | |||
} | |||
@@ -165,10 +160,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::DisconnectPorts"); | |||
JackPortDisconnectRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::DisconnectPorts write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->PortDisconnect(req.fRefNum, req.fSrc, req.fDst); | |||
CheckWriteRefNum("JackRequest::DisconnectPorts", socket); | |||
break; | |||
} | |||
@@ -176,10 +170,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::PortRename"); | |||
JackPortRenameRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->PortRename(req.fRefNum, req.fPort, req.fName); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::PortRename write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->PortRename(req.fRefNum, req.fPort, req.fName); | |||
CheckWriteRefNum("JackRequest::PortRename", socket); | |||
break; | |||
} | |||
@@ -187,10 +180,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::SetBufferSize"); | |||
JackSetBufferSizeRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->SetBufferSize(req.fBufferSize); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::SetBufferSize write error"); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->SetBufferSize(req.fBufferSize); | |||
CheckWrite("JackRequest::SetBufferSize", socket); | |||
break; | |||
} | |||
@@ -198,10 +190,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::SetFreeWheel"); | |||
JackSetFreeWheelRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->SetFreewheel(req.fOnOff); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::SetFreeWheel write error"); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->SetFreewheel(req.fOnOff); | |||
CheckWrite("JackRequest::SetFreeWheel", socket); | |||
break; | |||
} | |||
@@ -209,10 +200,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::ComputeTotalLatencies"); | |||
JackComputeTotalLatenciesRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->ComputeTotalLatencies(); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::ComputeTotalLatencies write error"); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->ComputeTotalLatencies(); | |||
CheckWrite("JackRequest::ComputeTotalLatencies", socket); | |||
break; | |||
} | |||
@@ -220,10 +210,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::ReleaseTimebase"); | |||
JackReleaseTimebaseRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->ReleaseTimebase(req.fRefNum); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::ReleaseTimebase write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->ReleaseTimebase(req.fRefNum); | |||
CheckWriteRefNum("JackRequest::ReleaseTimebase", socket); | |||
break; | |||
} | |||
@@ -231,10 +220,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::SetTimebaseCallback"); | |||
JackSetTimebaseCallbackRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->SetTimebaseCallback(req.fRefNum, req.fConditionnal); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::SetTimebaseCallback write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->SetTimebaseCallback(req.fRefNum, req.fConditionnal); | |||
CheckWriteRefNum("JackRequest::SetTimebaseCallback", socket); | |||
break; | |||
} | |||
@@ -242,10 +230,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::GetInternalClientName"); | |||
JackGetInternalClientNameRequest req; | |||
JackGetInternalClientNameResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->GetInternalClientName(req.fIntRefNum, res.fName); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::GetInternalClientName write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->GetInternalClientName(req.fIntRefNum, res.fName); | |||
CheckWriteRefNum("JackRequest::GetInternalClientName", socket); | |||
break; | |||
} | |||
@@ -253,10 +240,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::InternalClientHandle"); | |||
JackInternalClientHandleRequest req; | |||
JackInternalClientHandleResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->InternalClientHandle(req.fName, &res.fStatus, &res.fIntRefNum); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::InternalClientHandle write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->InternalClientHandle(req.fName, &res.fStatus, &res.fIntRefNum); | |||
CheckWriteRefNum("JackRequest::InternalClientHandle", socket); | |||
break; | |||
} | |||
@@ -264,10 +250,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::InternalClientLoad"); | |||
JackInternalClientLoadRequest req; | |||
JackInternalClientLoadResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->InternalClientLoad1(req.fName, req.fDllName, req.fLoadInitName, req.fOptions, &res.fIntRefNum, req.fUUID, &res.fStatus); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::InternalClientLoad write error name = %s", req.fName); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->InternalClientLoad1(req.fName, req.fDllName, req.fLoadInitName, req.fOptions, &res.fIntRefNum, req.fUUID, &res.fStatus); | |||
CheckWriteName("JackRequest::InternalClientLoad", socket); | |||
break; | |||
} | |||
@@ -275,23 +260,21 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::InternalClientUnload"); | |||
JackInternalClientUnloadRequest req; | |||
JackInternalClientUnloadResult res; | |||
if (req.Read(socket) == 0) | |||
res.fResult = fServer->GetEngine()->InternalClientUnload(req.fIntRefNum, &res.fStatus); | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::InternalClientUnload write error ref = %d", req.fRefNum); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->InternalClientUnload(req.fIntRefNum, &res.fStatus); | |||
CheckWriteRefNum("JackRequest::InternalClientUnload", socket); | |||
break; | |||
} | |||
case JackRequest::kNotification: { | |||
jack_log("JackRequest::Notification"); | |||
JackClientNotificationRequest req; | |||
if (req.Read(socket) == 0) { | |||
if (req.fNotify == kQUIT) { | |||
jack_log("JackRequest::Notification kQUIT"); | |||
throw JackQuitException(); | |||
} else { | |||
fServer->Notify(req.fRefNum, req.fNotify, req.fValue); | |||
} | |||
CheckRead(req, socket); | |||
if (req.fNotify == kQUIT) { | |||
jack_log("JackRequest::Notification kQUIT"); | |||
throw JackQuitException(); | |||
} else { | |||
fServer->Notify(req.fRefNum, req.fNotify, req.fValue); | |||
} | |||
break; | |||
} | |||
@@ -299,9 +282,8 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
case JackRequest::kSessionNotify: { | |||
jack_log("JackRequest::SessionNotify"); | |||
JackSessionNotifyRequest req; | |||
if (req.Read(socket) == 0) { | |||
fServer->GetEngine()->SessionNotify(req.fRefNum, req.fDst, req.fEventType, req.fPath, socket, NULL); | |||
} | |||
CheckRead(req, socket); | |||
fServer->GetEngine()->SessionNotify(req.fRefNum, req.fDst, req.fEventType, req.fPath, socket, NULL); | |||
break; | |||
} | |||
@@ -309,12 +291,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::SessionReply"); | |||
JackSessionReplyRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) { | |||
fServer->GetEngine()->SessionReply(req.fRefNum); | |||
res.fResult = 0; | |||
} | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::SessionReply write error"); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->SessionReply(req.fRefNum); | |||
CheckWrite("JackRequest::SessionReply", socket); | |||
break; | |||
} | |||
@@ -322,11 +301,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::GetClientByUUID"); | |||
JackGetClientNameRequest req; | |||
JackClientNameResult res; | |||
if (req.Read(socket) == 0) { | |||
fServer->GetEngine()->GetClientNameForUUID(req.fUUID, res.fName, &res.fResult); | |||
} | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::GetClientByUUID write error"); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->GetClientNameForUUID(req.fUUID, res.fName); | |||
CheckWrite("JackRequest::GetClientByUUID", socket); | |||
break; | |||
} | |||
@@ -334,11 +311,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::GetUUIDByClient"); | |||
JackGetUUIDRequest req; | |||
JackUUIDResult res; | |||
if (req.Read(socket) == 0) { | |||
fServer->GetEngine()->GetUUIDForClientName(req.fName, res.fUUID, &res.fResult); | |||
} | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::GetUUIDByClient write error"); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->GetUUIDForClientName(req.fName, res.fUUID); | |||
CheckWrite("JackRequest::GetUUIDByClient", socket); | |||
break; | |||
} | |||
@@ -346,11 +321,9 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::ReserveClientName"); | |||
JackReserveNameRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) { | |||
fServer->GetEngine()->ReserveClientName(req.fName, req.fUUID, &res.fResult); | |||
} | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::ReserveClientName write error"); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->ReserveClientName(req.fName, req.fUUID); | |||
CheckWrite("JackRequest::ReserveClientName", socket); | |||
break; | |||
} | |||
@@ -358,18 +331,18 @@ void JackRequestDecoder::HandleRequest(detail::JackChannelTransactionInterface* | |||
jack_log("JackRequest::ClientHasSessionCallback"); | |||
JackClientHasSessionCallbackRequest req; | |||
JackResult res; | |||
if (req.Read(socket) == 0) { | |||
fServer->GetEngine()->ClientHasSessionCallback(req.fName, &res.fResult); | |||
} | |||
if (res.Write(socket) < 0) | |||
jack_error("JackRequest::ClientHasSessionCallback write error"); | |||
CheckRead(req, socket); | |||
res.fResult = fServer->GetEngine()->ClientHasSessionCallback(req.fName); | |||
CheckWrite("JackRequest::ClientHasSessionCallback", socket); | |||
break; | |||
} | |||
default: | |||
jack_error("Unknown request %ld", type); | |||
break; | |||
return -1; | |||
} | |||
return 0; | |||
} | |||
} // end of namespace | |||
@@ -52,7 +52,7 @@ class JackRequestDecoder | |||
JackRequestDecoder(JackServer* server, JackClientHandlerInterface* handler); | |||
virtual ~JackRequestDecoder(); | |||
void HandleRequest(detail::JackChannelTransactionInterface* socket, int type); | |||
int HandleRequest(detail::JackChannelTransactionInterface* socket, int type); | |||
}; | |||
} // end of namespace | |||
@@ -287,7 +287,7 @@ OSStatus JackCoreAudioDriver::Render(void* inRefCon, | |||
// Setup threaded based log function et get RT thread parameters once... | |||
if (set_threaded_log_function()) { | |||
jack_log("set_threaded_log_function"); | |||
jack_log("JackCoreAudioDriver::Render : set_threaded_log_function"); | |||
JackMachThread::GetParams(pthread_self(), &driver->fEngineControl->fPeriod, &driver->fEngineControl->fComputation, &driver->fEngineControl->fConstraint); | |||
if (driver->fComputationGrain > 0) { | |||
@@ -302,8 +302,8 @@ OSStatus JackCoreAudioDriver::Render(void* inRefCon, | |||
driver->CycleTakeBeginTime(); | |||
if (driver->Process() < 0) { | |||
jack_error("Process error, stopping driver."); | |||
driver->NotifyFailure(JackBackendError, "Process error, stopping driver."); // Message length limited to JACK_MESSAGE_SIZE | |||
jack_error("Process error, stopping driver"); | |||
driver->NotifyFailure(JackBackendError, "Process error, stopping driver"); // Message length limited to JACK_MESSAGE_SIZE | |||
driver->Stop(); | |||
kill(JackTools::GetPID(), SIGINT); | |||
return kAudioHardwareUnsupportedOperationError; | |||
@@ -359,7 +359,7 @@ OSStatus JackCoreAudioDriver::SRNotificationCallback(AudioDeviceID inDevice, | |||
jack_error("Cannot get current sample rate"); | |||
printError(err); | |||
} else { | |||
jack_log("SRNotificationCallback : checked sample rate = %f", tmp_sample_rate); | |||
jack_log("JackCoreAudioDriver::SRNotificationCallback : checked sample rate = %f", tmp_sample_rate); | |||
} | |||
driver->fState = true; | |||
break; | |||
@@ -389,7 +389,7 @@ OSStatus JackCoreAudioDriver::BSNotificationCallback(AudioDeviceID inDevice, | |||
jack_error("Cannot get current buffer size"); | |||
printError(err); | |||
} else { | |||
jack_log("BSNotificationCallback : checked buffer size = %d", tmp_buffer_size); | |||
jack_log("JackCoreAudioDriver::BSNotificationCallback : checked buffer size = %d", tmp_buffer_size); | |||
} | |||
driver->fState = true; | |||
break; | |||
@@ -469,7 +469,7 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, | |||
case kAudioDevicePropertyStreamConfiguration: { | |||
jack_error("Cannot handle kAudioDevicePropertyStreamConfiguration : server will quit..."); | |||
driver->NotifyFailure(JackBackendError, "Another application has changed the device configuration."); // Message length limited to JACK_MESSAGE_SIZE | |||
driver->NotifyFailure(JackBackendError, "Another application has changed the device configuration"); // Message length limited to JACK_MESSAGE_SIZE | |||
driver->CloseAUHAL(); | |||
kill(JackTools::GetPID(), SIGINT); | |||
return kAudioHardwareUnsupportedOperationError; | |||
@@ -492,7 +492,7 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, | |||
// Digidesign hardware, so "special" code : change the SR again here | |||
if (strncmp(device_name, digidesign_name, 10) == 0) { | |||
jack_log("Digidesign HW = %s", device_name); | |||
jack_log("JackCoreAudioDriver::DeviceNotificationCallback Digidesign HW = %s", device_name); | |||
// Set sample rate again... | |||
sample_rate = driver->fEngineControl->fSampleRate; | |||
@@ -501,7 +501,7 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, | |||
jack_error("Cannot set sample rate = %f", sample_rate); | |||
printError(err); | |||
} else { | |||
jack_log("Set sample rate = %f", sample_rate); | |||
jack_log("JackCoreAudioDriver::DeviceNotificationCallback : set sample rate = %f", sample_rate); | |||
} | |||
// Check new sample rate again... | |||
@@ -511,12 +511,12 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, | |||
jack_error("Cannot get current sample rate"); | |||
printError(err); | |||
} else { | |||
jack_log("Checked sample rate = %f", sample_rate); | |||
jack_log("JackCoreAudioDriver::DeviceNotificationCallback : checked sample rate = %f", sample_rate); | |||
} | |||
return noErr; | |||
} else { | |||
driver->NotifyFailure(JackBackendError, "Another application has changed the sample rate."); // Message length limited to JACK_MESSAGE_SIZE | |||
driver->NotifyFailure(JackBackendError, "Another application has changed the sample rate"); // Message length limited to JACK_MESSAGE_SIZE | |||
driver->CloseAUHAL(); | |||
kill(JackTools::GetPID(), SIGINT); | |||
return kAudioHardwareUnsupportedOperationError; | |||
@@ -539,7 +539,7 @@ OSStatus JackCoreAudioDriver::GetDeviceIDFromUID(const char* UID, AudioDeviceID* | |||
} else { | |||
OSStatus res = AudioHardwareGetProperty(kAudioHardwarePropertyDeviceForUID, &size, &value); | |||
CFRelease(inIUD); | |||
jack_log("GetDeviceIDFromUID %s %ld", UID, *id); | |||
jack_log("JackCoreAudioDriver::GetDeviceIDFromUID %s %ld", UID, *id); | |||
return (*id == kAudioDeviceUnknown) ? kAudioHardwareBadDeviceError : res; | |||
} | |||
} | |||
@@ -559,7 +559,7 @@ OSStatus JackCoreAudioDriver::GetDefaultDevice(AudioDeviceID* id) | |||
return res; | |||
} | |||
jack_log("GetDefaultDevice: input = %ld output = %ld", inDefault, outDefault); | |||
jack_log("JackCoreAudioDriver::GetDefaultDevice : input = %ld output = %ld", inDefault, outDefault); | |||
// Get the device only if default input and output are the same | |||
if (inDefault != outDefault) { | |||
@@ -588,7 +588,7 @@ OSStatus JackCoreAudioDriver::GetDefaultInputDevice(AudioDeviceID* id) | |||
jack_error("Error: default input device is 0, please select a correct one !!"); | |||
return -1; | |||
} | |||
jack_log("GetDefaultInputDevice: input = %ld ", inDefault); | |||
jack_log("JackCoreAudioDriver::GetDefaultInputDevice : input = %ld ", inDefault); | |||
*id = inDefault; | |||
return noErr; | |||
} | |||
@@ -607,7 +607,7 @@ OSStatus JackCoreAudioDriver::GetDefaultOutputDevice(AudioDeviceID* id) | |||
jack_error("Error: default output device is 0, please select a correct one !!"); | |||
return -1; | |||
} | |||
jack_log("GetDefaultOutputDevice: output = %ld", outDefault); | |||
jack_log("JackCoreAudioDriver::GetDefaultOutputDevice : output = %ld", outDefault); | |||
*id = outDefault; | |||
return noErr; | |||
} | |||
@@ -741,11 +741,11 @@ OSStatus JackCoreAudioDriver::CreateAggregateDevice(AudioDeviceID captureDeviceI | |||
vector<AudioDeviceID> captureDeviceIDArray; | |||
if (err != noErr) { | |||
jack_log("Input device does not have subdevices"); | |||
jack_log("JackCoreAudioDriver::CreateAggregateDevice : input device does not have subdevices"); | |||
captureDeviceIDArray.push_back(captureDeviceID); | |||
} else { | |||
int num_devices = outSize / sizeof(AudioObjectID); | |||
jack_log("Input device has %d subdevices", num_devices); | |||
jack_log("JackCoreAudioDriver::CreateAggregateDevice :Input device has %d subdevices", num_devices); | |||
for (int i = 0; i < num_devices; i++) { | |||
captureDeviceIDArray.push_back(sub_device[i]); | |||
} | |||
@@ -755,11 +755,11 @@ OSStatus JackCoreAudioDriver::CreateAggregateDevice(AudioDeviceID captureDeviceI | |||
vector<AudioDeviceID> playbackDeviceIDArray; | |||
if (err != noErr) { | |||
jack_log("Output device does not have subdevices"); | |||
jack_log("JackCoreAudioDriver::CreateAggregateDevice : output device does not have subdevices"); | |||
playbackDeviceIDArray.push_back(playbackDeviceID); | |||
} else { | |||
int num_devices = outSize / sizeof(AudioObjectID); | |||
jack_log("Output device has %d subdevices", num_devices); | |||
jack_log("JackCoreAudioDriver::CreateAggregateDevice : output device has %d subdevices", num_devices); | |||
for (int i = 0; i < num_devices; i++) { | |||
playbackDeviceIDArray.push_back(sub_device[i]); | |||
} | |||
@@ -1107,7 +1107,7 @@ OSStatus JackCoreAudioDriver::CreateAggregateDeviceAux(vector<AudioDeviceID> cap | |||
CFRelease(playbackDeviceUID[i]); | |||
} | |||
jack_log("New aggregate device %ld", *outAggregateDevice); | |||
jack_log("JackCoreAudioDriver::CreateAggregateDeviceAux : new aggregate device %ld", *outAggregateDevice); | |||
return noErr; | |||
error: | |||
@@ -1126,13 +1126,13 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||
// Duplex | |||
if (strcmp(capture_driver_uid, "") != 0 && strcmp(playback_driver_uid, "") != 0) { | |||
jack_log("JackCoreAudioDriver::Open duplex"); | |||
jack_log("JackCoreAudioDriver::SetupDevices : duplex"); | |||
// Same device for capture and playback... | |||
if (strcmp(capture_driver_uid, playback_driver_uid) == 0) { | |||
if (GetDeviceIDFromUID(playback_driver_uid, &fDeviceID) != noErr) { | |||
jack_log("Will take default in/out"); | |||
jack_log("JackCoreAudioDriver::SetupDevices : will take default in/out"); | |||
if (GetDefaultDevice(&fDeviceID) != noErr) { | |||
jack_error("Cannot open default device"); | |||
return -1; | |||
@@ -1149,7 +1149,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||
AudioDeviceID captureID, playbackID; | |||
if (GetDeviceIDFromUID(capture_driver_uid, &captureID) != noErr) { | |||
jack_log("Will take default input"); | |||
jack_log("JackCoreAudioDriver::SetupDevices : will take default input"); | |||
if (GetDefaultInputDevice(&captureID) != noErr) { | |||
jack_error("Cannot open default input device"); | |||
return -1; | |||
@@ -1157,7 +1157,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||
} | |||
if (GetDeviceIDFromUID(playback_driver_uid, &playbackID) != noErr) { | |||
jack_log("Will take default output"); | |||
jack_log("JackCoreAudioDriver::SetupDevices : will take default output"); | |||
if (GetDefaultOutputDevice(&playbackID) != noErr) { | |||
jack_error("Cannot open default output device"); | |||
return -1; | |||
@@ -1174,9 +1174,9 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||
// Capture only | |||
} else if (strcmp(capture_driver_uid, "") != 0) { | |||
jack_log("JackCoreAudioDriver::Open capture only"); | |||
jack_log("JackCoreAudioDriver::SetupDevices : capture only"); | |||
if (GetDeviceIDFromUID(capture_driver_uid, &fDeviceID) != noErr) { | |||
jack_log("Will take default input"); | |||
jack_log("JackCoreAudioDriver::SetupDevices : will take default input"); | |||
if (GetDefaultInputDevice(&fDeviceID) != noErr) { | |||
jack_error("Cannot open default input device"); | |||
return -1; | |||
@@ -1189,9 +1189,9 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||
// Playback only | |||
} else if (strcmp(playback_driver_uid, "") != 0) { | |||
jack_log("JackCoreAudioDriver::Open playback only"); | |||
jack_log("JackCoreAudioDriver::SetupDevices : playback only"); | |||
if (GetDeviceIDFromUID(playback_driver_uid, &fDeviceID) != noErr) { | |||
jack_log("Will take default output"); | |||
jack_log("JackCoreAudioDriver::SetupDevices : will take default output"); | |||
if (GetDefaultOutputDevice(&fDeviceID) != noErr) { | |||
jack_error("Cannot open default output device"); | |||
return -1; | |||
@@ -1204,7 +1204,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||
// Use default driver in duplex mode | |||
} else { | |||
jack_log("JackCoreAudioDriver::Open default driver"); | |||
jack_log("JackCoreAudioDriver::SetupDevices : default driver"); | |||
if (GetDefaultDevice(&fDeviceID) != noErr) { | |||
jack_error("Cannot open default device in duplex mode, so aggregate default input and default output"); | |||
@@ -1212,7 +1212,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||
AudioDeviceID captureID, playbackID; | |||
if (GetDeviceIDFromUID(capture_driver_uid, &captureID) != noErr) { | |||
jack_log("Will take default input"); | |||
jack_log("JackCoreAudioDriver::SetupDevices : will take default input"); | |||
if (GetDefaultInputDevice(&captureID) != noErr) { | |||
jack_error("Cannot open default input device"); | |||
return -1; | |||
@@ -1220,7 +1220,7 @@ int JackCoreAudioDriver::SetupDevices(const char* capture_driver_uid, | |||
} | |||
if (GetDeviceIDFromUID(playback_driver_uid, &playbackID) != noErr) { | |||
jack_log("Will take default output"); | |||
jack_log("JackCoreAudioDriver::SetupDevices : will take default output"); | |||
if (GetDefaultOutputDevice(&playbackID) != noErr) { | |||
jack_error("Cannot open default output device"); | |||
return -1; | |||
@@ -1255,11 +1255,11 @@ int JackCoreAudioDriver::SetupChannels(bool capturing, bool playing, int& inchan | |||
if (capturing) { | |||
err = GetTotalChannels(fDeviceID, in_nChannels, true); | |||
if (err != noErr) { | |||
jack_error("Cannot get input channel number"); | |||
jack_error("JackCoreAudioDriver::SetupChannels : cannot get input channel number"); | |||
printError(err); | |||
return -1; | |||
} else { | |||
jack_log("Max input channels : %d", in_nChannels); | |||
jack_log("JackCoreAudioDriver::SetupChannels : max input channels : %d", in_nChannels); | |||
} | |||
} | |||
@@ -1270,7 +1270,7 @@ int JackCoreAudioDriver::SetupChannels(bool capturing, bool playing, int& inchan | |||
printError(err); | |||
return -1; | |||
} else { | |||
jack_log("Max output channels : %d", out_nChannels); | |||
jack_log("JackCoreAudioDriver::SetupChannels : max output channels : %d", out_nChannels); | |||
} | |||
} | |||
@@ -1289,12 +1289,12 @@ int JackCoreAudioDriver::SetupChannels(bool capturing, bool playing, int& inchan | |||
} | |||
if (inchannels == -1) { | |||
jack_log("Setup max in channels = %d", in_nChannels); | |||
jack_log("JackCoreAudioDriver::SetupChannels : setup max in channels = %d", in_nChannels); | |||
inchannels = in_nChannels; | |||
} | |||
if (outchannels == -1) { | |||
jack_log("Setup max out channels = %d", out_nChannels); | |||
jack_log("JackCoreAudioDriver::SetupChannels : setup max out channels = %d", out_nChannels); | |||
outchannels = out_nChannels; | |||
} | |||
@@ -1314,7 +1314,7 @@ int JackCoreAudioDriver::SetupBufferSize(jack_nframes_t buffer_size) | |||
printError(err); | |||
return -1; | |||
} else { | |||
jack_log("Current buffer size = %ld", tmp_buffer_size); | |||
jack_log("JackCoreAudioDriver::SetupBufferSize : current buffer size = %ld", tmp_buffer_size); | |||
} | |||
// If needed, set new buffer size | |||
@@ -1335,14 +1335,14 @@ int JackCoreAudioDriver::SetupBufferSize(jack_nframes_t buffer_size) | |||
err = AudioDeviceSetProperty(fDeviceID, NULL, 0, kAudioDeviceSectionGlobal, kAudioDevicePropertyBufferFrameSize, outSize, &tmp_buffer_size); | |||
if (err != noErr) { | |||
jack_error("Cannot set buffer size = %ld", tmp_buffer_size); | |||
jack_error("JackCoreAudioDriver::SetupBufferSize : cannot set buffer size = %ld", tmp_buffer_size); | |||
printError(err); | |||
goto error; | |||
} | |||
while (!fState && count++ < WAIT_NOTIFICATION_COUNTER) { | |||
usleep(100000); | |||
jack_log("Wait count = %d", count); | |||
jack_log("JackCoreAudioDriver::SetupBufferSize : wait count = %d", count); | |||
} | |||
if (count >= WAIT_NOTIFICATION_COUNTER) { | |||
@@ -1357,7 +1357,7 @@ int JackCoreAudioDriver::SetupBufferSize(jack_nframes_t buffer_size) | |||
jack_error("Cannot get current buffer size"); | |||
printError(err); | |||
} else { | |||
jack_log("Checked buffer size = %ld", tmp_buffer_size); | |||
jack_log("JackCoreAudioDriver::SetupBufferSize : checked buffer size = %ld", tmp_buffer_size); | |||
} | |||
// Remove BS change notification | |||
@@ -1393,7 +1393,7 @@ int JackCoreAudioDriver::SetupSampleRateAux(AudioDeviceID inDevice, jack_nframes | |||
printError(err); | |||
return -1; | |||
} else { | |||
jack_log("Current sample rate = %f", tmp_sample_rate); | |||
jack_log("JackCoreAudioDriver::SetupSampleRateAux : current sample rate = %f", tmp_sample_rate); | |||
} | |||
// If needed, set new sample rate | |||
@@ -1421,7 +1421,7 @@ int JackCoreAudioDriver::SetupSampleRateAux(AudioDeviceID inDevice, jack_nframes | |||
while (!fState && count++ < WAIT_NOTIFICATION_COUNTER) { | |||
usleep(100000); | |||
jack_log("Wait count = %d", count); | |||
jack_log("JackCoreAudioDriver::SetupSampleRateAux : wait count = %d", count); | |||
} | |||
if (count >= WAIT_NOTIFICATION_COUNTER) { | |||
@@ -1436,7 +1436,7 @@ int JackCoreAudioDriver::SetupSampleRateAux(AudioDeviceID inDevice, jack_nframes | |||
jack_error("Cannot get current sample rate"); | |||
printError(err); | |||
} else { | |||
jack_log("Checked sample rate = %f", tmp_sample_rate); | |||
jack_log("JackCoreAudioDriver::SetupSampleRateAux : checked sample rate = %f", tmp_sample_rate); | |||
} | |||
// Remove SR change notification | |||
@@ -1469,7 +1469,7 @@ int JackCoreAudioDriver::OpenAUHAL(bool capturing, | |||
AudioDeviceID currAudioDeviceID; | |||
UInt32 size; | |||
jack_log("OpenAUHAL capturing = %d playing = %d inchannels = %d outchannels = %d in_nChannels = %d out_nChannels = %d chan_in_list = %d chan_out_list = %d", | |||
jack_log("JackCoreAudioDriver::OpenAUHAL : capturing = %d playing = %d inchannels = %d outchannels = %d in_nChannels = %d out_nChannels = %d chan_in_list = %d chan_out_list = %d", | |||
capturing, playing, inchannels, outchannels, in_nChannels, out_nChannels, chan_in_list.size(), chan_out_list.size()); | |||
if (inchannels == 0 && outchannels == 0) { | |||
@@ -1498,10 +1498,10 @@ int JackCoreAudioDriver::OpenAUHAL(bool capturing, | |||
// Start I/O | |||
if (capturing && inchannels > 0) { | |||
enableIO = 1; | |||
jack_log("Setup AUHAL input on"); | |||
jack_log("JackCoreAudioDriver::OpenAUHAL : setup AUHAL input on"); | |||
} else { | |||
enableIO = 0; | |||
jack_log("Setup AUHAL input off"); | |||
jack_log("JackCoreAudioDriver::OpenAUHAL : setup AUHAL input off"); | |||
} | |||
err1 = AudioUnitSetProperty(fAUHAL, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, 1, &enableIO, sizeof(enableIO)); | |||
@@ -1513,10 +1513,10 @@ int JackCoreAudioDriver::OpenAUHAL(bool capturing, | |||
if (playing && outchannels > 0) { | |||
enableIO = 1; | |||
jack_log("Setup AUHAL output on"); | |||
jack_log("JackCoreAudioDriver::OpenAUHAL : setup AUHAL output on"); | |||
} else { | |||
enableIO = 0; | |||
jack_log("Setup AUHAL output off"); | |||
jack_log("JackCoreAudioDriver::OpenAUHAL : setup AUHAL output off"); | |||
} | |||
err1 = AudioUnitSetProperty(fAUHAL, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, 0, &enableIO, sizeof(enableIO)); | |||
@@ -1533,7 +1533,7 @@ int JackCoreAudioDriver::OpenAUHAL(bool capturing, | |||
printError(err1); | |||
goto error; | |||
} else { | |||
jack_log("AudioUnitGetPropertyCurrentDevice = %d", currAudioDeviceID); | |||
jack_log("JackCoreAudioDriver::OpenAUHAL : AudioUnitGetPropertyCurrentDevice = %d", currAudioDeviceID); | |||
} | |||
// Setup up choosen device, in both input and output cases | |||
@@ -1643,7 +1643,7 @@ int JackCoreAudioDriver::OpenAUHAL(bool capturing, | |||
} | |||
PrintStreamDesc(&srcFormat); | |||
jack_log("Setup AUHAL input stream converter SR = %ld", sample_rate); | |||
jack_log("JackCoreAudioDriver::OpenAUHAL : setup AUHAL input stream converter SR = %ld", sample_rate); | |||
srcFormat.mSampleRate = sample_rate; | |||
srcFormat.mFormatID = kAudioFormatLinearPCM; | |||
srcFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kLinearPCMFormatFlagIsNonInterleaved; | |||
@@ -1673,7 +1673,7 @@ int JackCoreAudioDriver::OpenAUHAL(bool capturing, | |||
} | |||
PrintStreamDesc(&dstFormat); | |||
jack_log("Setup AUHAL output stream converter SR = %ld", sample_rate); | |||
jack_log("JackCoreAudioDriver::OpenAUHAL : setup AUHAL output stream converter SR = %ld", sample_rate); | |||
dstFormat.mSampleRate = sample_rate; | |||
dstFormat.mFormatID = kAudioFormatLinearPCM; | |||
dstFormat.mFormatFlags = kAudioFormatFlagsNativeFloatPacked | kLinearPCMFormatFlagIsNonInterleaved; | |||
@@ -2043,18 +2043,18 @@ int JackCoreAudioDriver::Attach() | |||
char name[REAL_JACK_PORT_NAME_SIZE]; | |||
char alias[REAL_JACK_PORT_NAME_SIZE]; | |||
jack_log("JackCoreAudioDriver::Attach fBufferSize %ld fSampleRate %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate); | |||
jack_log("JackCoreAudioDriver::Attach : fBufferSize %ld fSampleRate %ld", fEngineControl->fBufferSize, fEngineControl->fSampleRate); | |||
for (int i = 0; i < fCaptureChannels; i++) { | |||
err = AudioDeviceGetPropertyInfo(fDeviceID, i + 1, true, kAudioDevicePropertyChannelName, &size, &isWritable); | |||
if (err != noErr) { | |||
jack_log("AudioDeviceGetPropertyInfo kAudioDevicePropertyChannelName error"); | |||
jack_log("JackCoreAudioDriver::Attach : AudioDeviceGetPropertyInfo kAudioDevicePropertyChannelName error"); | |||
} | |||
if (err == noErr && size > 0) { | |||
err = AudioDeviceGetProperty(fDeviceID, i + 1, true, kAudioDevicePropertyChannelName, &size, channel_name); | |||
if (err != noErr) { | |||
jack_log("AudioDeviceGetProperty kAudioDevicePropertyChannelName error"); | |||
jack_log("JackCoreAudioDriver::Attach : AudioDeviceGetProperty kAudioDevicePropertyChannelName error"); | |||
} | |||
snprintf(alias, sizeof(alias), "%s:%s:out_%s%u", fAliasName, fCaptureDriverName, channel_name, i + 1); | |||
} else { | |||
@@ -2077,12 +2077,12 @@ int JackCoreAudioDriver::Attach() | |||
err = AudioDeviceGetPropertyInfo(fDeviceID, i + 1, false, kAudioDevicePropertyChannelName, &size, &isWritable); | |||
if (err != noErr) { | |||
jack_log("AudioDeviceGetPropertyInfo kAudioDevicePropertyChannelName error"); | |||
jack_log("JackCoreAudioDriver::Attach : AudioDeviceGetPropertyInfo kAudioDevicePropertyChannelName error"); | |||
} | |||
if (err == noErr && size > 0) { | |||
err = AudioDeviceGetProperty(fDeviceID, i + 1, false, kAudioDevicePropertyChannelName, &size, channel_name); | |||
if (err != noErr) { | |||
jack_log("AudioDeviceGetProperty kAudioDevicePropertyChannelName error"); | |||
jack_log("JackCoreAudioDriver::Attach : AudioDeviceGetProperty kAudioDevicePropertyChannelName error"); | |||
} | |||
snprintf(alias, sizeof(alias), "%s:%s:in_%s%u", fAliasName, fPlaybackDriverName, channel_name, i + 1); | |||
} else { | |||
@@ -2102,7 +2102,7 @@ int JackCoreAudioDriver::Attach() | |||
// Monitor ports | |||
if (fWithMonitorPorts) { | |||
jack_log("Create monitor port"); | |||
jack_log("JackCoreAudioDriver::Attach : create monitor port"); | |||
snprintf(name, sizeof(name), "%s:monitor_%u", fClientControl.fName, i + 1); | |||
if (fEngine->PortRegister(fClientControl.fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, MonitorDriverFlags, fEngineControl->fBufferSize, &port_index) < 0) { | |||
jack_error("Cannot register monitor port for %s", name); | |||
@@ -2137,7 +2137,7 @@ int JackCoreAudioDriver::Start() | |||
while (!fState && count++ < WAIT_COUNTER) { | |||
usleep(100000); | |||
jack_log("JackCoreAudioDriver::Start wait count = %d", count); | |||
jack_log("JackCoreAudioDriver::Start : wait count = %d", count); | |||
} | |||
if (count < WAIT_COUNTER) { | |||
@@ -2215,11 +2215,11 @@ bool JackCoreAudioDriver::TakeHog() | |||
err = AudioDeviceGetProperty(fDeviceID, 0, kAudioDeviceSectionGlobal, kAudioAggregateDevicePropertyActiveSubDeviceList, &outSize, sub_device); | |||
if (err != noErr) { | |||
jack_log("Device does not have subdevices"); | |||
jack_log("JackCoreAudioDriver::TakeHog : device does not have subdevices"); | |||
return TakeHogAux(fDeviceID, true); | |||
} else { | |||
int num_devices = outSize / sizeof(AudioObjectID); | |||
jack_log("Device does has %d subdevices", num_devices); | |||
jack_log("JackCoreAudioDriver::TakeHog : device does has %d subdevices", num_devices); | |||
for (int i = 0; i < num_devices; i++) { | |||
if (!TakeHogAux(sub_device[i], true)) { | |||
return false; | |||
@@ -42,7 +42,7 @@ void* JackPosixThread::ThreadHandler(void* arg) | |||
} | |||
// Signal creation thread when started with StartSync | |||
jack_log("ThreadHandler: start"); | |||
jack_log("JackPosixThread::ThreadHandler : start"); | |||
obj->fStatus = kIniting; | |||
// Call Init method | |||
@@ -59,7 +59,7 @@ void* JackPosixThread::ThreadHandler(void* arg) | |||
res = runnable->Execute(); | |||
} | |||
jack_log("ThreadHandler: exit"); | |||
jack_log("JackPosixThread::ThreadHandler : exit"); | |||
pthread_exit(0); | |||
return 0; // never reached | |||
} | |||
@@ -112,7 +112,7 @@ int JackPosixThread::StartImp(jack_native_thread_t* thread, int priority, int re | |||
if (realtime) { | |||
jack_log("Create RT thread"); | |||
jack_log("JackPosixThread::StartImp : create RT thread"); | |||
if ((res = pthread_attr_setinheritsched(&attributes, PTHREAD_EXPLICIT_SCHED))) { | |||
jack_error("Cannot request explicit scheduling for RT thread res = %d", res); | |||
@@ -133,7 +133,7 @@ int JackPosixThread::StartImp(jack_native_thread_t* thread, int priority, int re | |||
} | |||
} else { | |||
jack_log("Create non RT thread"); | |||
jack_log("JackPosixThread::StartImp : create non RT thread"); | |||
} | |||
if ((res = pthread_attr_setstacksize(&attributes, THREAD_STACK))) { | |||
@@ -141,7 +141,7 @@ void JackSocketServerChannel::ClientAdd(detail::JackChannelTransactionInterface* | |||
#ifdef __APPLE__ | |||
int on = 1; | |||
if (setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, (const char*)&on, sizeof(on)) < 0) { | |||
jack_log("setsockopt SO_NOSIGPIPE fd = %ld err = %s", fd, strerror(errno)); | |||
jack_log("JackSocketServerChannel::ClientAdd : setsockopt SO_NOSIGPIPE fd = %ld err = %s", fd, strerror(errno)); | |||
} | |||
#endif | |||
} else { | |||
@@ -202,7 +202,7 @@ void JackSocketServerChannel::BuildPoolTable() | |||
int i; | |||
for (i = 1, it = fSocketTable.begin(); it != fSocketTable.end(); it++, i++) { | |||
jack_log("fSocketTable i = %ld fd = %ld", i, it->first); | |||
jack_log("JackSocketServerChannel::BuildPoolTable fSocketTable i = %ld fd = %ld", i, it->first); | |||
fPollTable[i].fd = it->first; | |||
fPollTable[i].events = POLLIN | POLLPRI | POLLERR | POLLHUP | POLLNVAL; | |||
} | |||
@@ -224,44 +224,46 @@ bool JackSocketServerChannel::Execute() | |||
// Global poll | |||
if ((poll(fPollTable, fSocketTable.size() + 1, 10000) < 0) && (errno != EINTR)) { | |||
jack_error("Engine poll failed err = %s request thread quits...", strerror(errno)); | |||
jack_error("JackSocketServerChannel::Execute : engine poll failed err = %s request thread quits...", strerror(errno)); | |||
return false; | |||
} else { | |||
// Poll all clients | |||
for (unsigned int i = 1; i < fSocketTable.size() + 1; i++) { | |||
int fd = fPollTable[i].fd; | |||
jack_log("fPollTable i = %ld fd = %ld", i, fd); | |||
jack_log("JackSocketServerChannel::Execute : fPollTable i = %ld fd = %ld", i, fd); | |||
if (fPollTable[i].revents & ~POLLIN) { | |||
jack_log("Poll client error err = %s", strerror(errno)); | |||
jack_log("JackSocketServerChannel::Execute : poll client error err = %s", strerror(errno)); | |||
ClientKill(fd); | |||
} else if (fPollTable[i].revents & POLLIN) { | |||
// Read header | |||
JackClientSocket* socket = fSocketTable[fd].second; | |||
// Decode header | |||
JackRequest header; | |||
if (header.Read(socket) < 0) { | |||
jack_log("HandleRequest: cannot read header"); | |||
jack_log("JackSocketServerChannel::Execute : cannot decode header"); | |||
ClientKill(fd); | |||
return false; | |||
} else { | |||
fDecoder->HandleRequest(socket, header.fType); | |||
// Decode request | |||
} else if (fDecoder->HandleRequest(socket, header.fType) < 0) { | |||
jack_log("JackSocketServerChannel::Execute : cannot decode request"); | |||
} | |||
} | |||
} | |||
// Check the server request socket */ | |||
if (fPollTable[0].revents & POLLERR) | |||
if (fPollTable[0].revents & POLLERR) { | |||
jack_error("Error on server request socket err = %s", strerror(errno)); | |||
} | |||
if (fPollTable[0].revents & POLLIN) | |||
if (fPollTable[0].revents & POLLIN) { | |||
ClientCreate(); | |||
} | |||
} | |||
BuildPoolTable(); | |||
return true; | |||
} catch (JackQuitException& e) { | |||
jack_log("JackSocketServerChannel::Execute JackQuitException"); | |||
jack_log("JackSocketServerChannel::Execute : JackQuitException"); | |||
return false; | |||
} | |||
} | |||
@@ -85,34 +85,36 @@ void JackClientPipeThread::Close() // Close | |||
bool JackClientPipeThread::Execute() | |||
{ | |||
try{ | |||
try { | |||
jack_log("JackClientPipeThread::Execute"); | |||
JackRequest header; | |||
int res = header.Read(fPipe); | |||
bool ret = true; | |||
// Lock the global mutex | |||
if (WaitForSingleObject(fMutex, INFINITE) == WAIT_FAILED) { | |||
jack_error("JackClientPipeThread::HandleRequest: mutex wait error"); | |||
jack_error("JackClientPipeThread::Execute : mutex wait error"); | |||
} | |||
// Decode header | |||
if (res < 0) { | |||
jack_log("HandleRequest: cannot read header"); | |||
jack_log("JackClientPipeThread::Execute : cannot decode header"); | |||
ClientKill(); | |||
ret = false; | |||
// Decode request | |||
} else if {fDecoder->HandleRequest(fPipe, header.fType) < 0) { | |||
jack_log("JackClientPipeThread::Execute : cannot decode request"); | |||
} | |||
fDecoder->HandleRequest(fPipe, header.fType); | |||
// Unlock the global mutex | |||
if (!ReleaseMutex(fMutex)) { | |||
jack_error("JackClientPipeThread::HandleRequest: mutex release error"); | |||
jack_error("JackClientPipeThread::Execute : mutex release error"); | |||
} | |||
return ret; | |||
} catch (JackQuitException& e) { | |||
jack_log("JackClientPipeThread::Execute JackQuitException"); | |||
jack_log("JackClientPipeThread::Execute : JackQuitException"); | |||
return false; | |||
} | |||
} | |||
@@ -32,7 +32,7 @@ DWORD WINAPI JackWinThread::ThreadHandler(void* arg) | |||
JackRunnableInterface* runnable = obj->fRunnable; | |||
// Signal creation thread when started with StartSync | |||
jack_log("ThreadHandler: start"); | |||
jack_log("JackWinThread::ThreadHandler : start"); | |||
obj->fStatus = kIniting; | |||
// Call Init method | |||
@@ -50,7 +50,7 @@ DWORD WINAPI JackWinThread::ThreadHandler(void* arg) | |||
} | |||
SetEvent(obj->fEvent); | |||
jack_log("ThreadHandler: exit"); | |||
jack_log("JackWinThread::ThreadHandler : exit"); | |||
return 0; | |||
} | |||
@@ -109,14 +109,14 @@ int JackWinThread::StartImp(jack_native_thread_t* thread, int priority, int real | |||
if (realtime) { | |||
jack_log("Create RT thread"); | |||
jack_log("JackWinThread::StartImp : create RT thread"); | |||
if (!SetThreadPriority(*thread, THREAD_PRIORITY_TIME_CRITICAL)) { | |||
jack_error("Cannot set priority class = %d", GetLastError()); | |||
return -1; | |||
} | |||
} else { | |||
jack_log("Create non RT thread"); | |||
jack_log("JackWinThread::StartImp : create non RT thread"); | |||
} | |||
return 0; | |||