Browse Source

Fix in netjack code.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4360 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.8
sletz 14 years ago
parent
commit
b9ae7166f3
3 changed files with 61 additions and 60 deletions
  1. +19
    -19
      common/JackNetInterface.cpp
  2. +22
    -22
      common/JackNetManager.cpp
  3. +20
    -19
      posix/JackNetUnixSocket.cpp

+ 19
- 19
common/JackNetInterface.cpp View File

@@ -154,7 +154,7 @@ namespace Jack


bool JackNetMasterInterface::Init() bool JackNetMasterInterface::Init()
{ {
jack_log ( "JackNetMasterInterface::Init, ID %u.", fParams.fID );
jack_log ( "JackNetMasterInterface::Init, ID %u", fParams.fID );


session_params_t host_params; session_params_t host_params;
uint attempt = 0; uint attempt = 0;
@@ -186,12 +186,12 @@ namespace Jack
SessionParamsHToN(&fParams, &net_params); SessionParamsHToN(&fParams, &net_params);


if ( fSocket.Send ( &net_params, sizeof ( session_params_t ), 0 ) == SOCKET_ERROR ) if ( fSocket.Send ( &net_params, sizeof ( session_params_t ), 0 ) == SOCKET_ERROR )
jack_error ( "Error in send : ", StrError ( NET_ERROR_CODE ) );
jack_error("Error in send : %s", StrError(NET_ERROR_CODE));


memset(&net_params, 0, sizeof (session_params_t)); memset(&net_params, 0, sizeof (session_params_t));
if (((rx_bytes = fSocket.Recv(&net_params, sizeof(session_params_t), 0)) == SOCKET_ERROR) && (fSocket.GetError() != NET_NO_DATA)) if (((rx_bytes = fSocket.Recv(&net_params, sizeof(session_params_t), 0)) == SOCKET_ERROR) && (fSocket.GetError() != NET_NO_DATA))
{ {
jack_error ( "Problem with network." );
jack_error ( "Problem with network" );
return false; return false;
} }


@@ -199,7 +199,7 @@ namespace Jack
} }
while ( ( GetPacketType ( &host_params ) != START_MASTER ) && ( ++attempt < SLAVE_SETUP_RETRY ) ); while ( ( GetPacketType ( &host_params ) != START_MASTER ) && ( ++attempt < SLAVE_SETUP_RETRY ) );
if ( attempt == SLAVE_SETUP_RETRY ) { if ( attempt == SLAVE_SETUP_RETRY ) {
jack_error ( "Slave doesn't respond, exiting." );
jack_error ( "Slave doesn't respond, exiting" );
return false; return false;
} }


@@ -315,24 +315,24 @@ namespace Jack


void JackNetMasterInterface::Exit() void JackNetMasterInterface::Exit()
{ {
jack_log ( "JackNetMasterInterface::Exit, ID %u", fParams.fID );
jack_log("JackNetMasterInterface::Exit, ID %u", fParams.fID);


//stop process //stop process
fRunning = false; fRunning = false;


//send a 'multicast euthanasia request' - new socket is required on macosx //send a 'multicast euthanasia request' - new socket is required on macosx
jack_info ( "Exiting '%s'", fParams.fName );
SetPacketType ( &fParams, KILL_MASTER );
JackNetSocket mcast_socket ( fMulticastIP, fSocket.GetPort() );
jack_info("Exiting '%s'", fParams.fName);
SetPacketType(&fParams, KILL_MASTER);
JackNetSocket mcast_socket(fMulticastIP, fSocket.GetPort());


session_params_t net_params; session_params_t net_params;
memset(&net_params, 0, sizeof ( session_params_t ));
memset(&net_params, 0, sizeof(session_params_t));
SessionParamsHToN(&fParams, &net_params); SessionParamsHToN(&fParams, &net_params);


if ( mcast_socket.NewSocket() == SOCKET_ERROR )
jack_error ( "Can't create socket : %s", StrError ( NET_ERROR_CODE ) );
if ( mcast_socket.SendTo ( &net_params, sizeof ( session_params_t ), 0, fMulticastIP ) == SOCKET_ERROR )
jack_error ( "Can't send suicide request : %s", StrError ( NET_ERROR_CODE ) );
if (mcast_socket.NewSocket() == SOCKET_ERROR)
jack_error("Can't create socket : %s", StrError(NET_ERROR_CODE));
if (mcast_socket.SendTo(&net_params, sizeof(session_params_t), 0, fMulticastIP) == SOCKET_ERROR)
jack_error("Can't send suicide request : %s", StrError(NET_ERROR_CODE));


mcast_socket.Close(); mcast_socket.Close();
} }
@@ -348,14 +348,14 @@ namespace Jack
return 0; return 0;
} else if (error == NET_CONN_ERROR) { } else if (error == NET_CONN_ERROR) {
//fatal connection issue, exit //fatal connection issue, exit
jack_error ( "'%s' : %s, exiting.", fParams.fName, StrError(NET_ERROR_CODE));
jack_error("'%s' : %s, exiting", fParams.fName, StrError(NET_ERROR_CODE));
//ask to the manager to properly remove the master //ask to the manager to properly remove the master
Exit(); Exit();


// UGLY temporary way to be sure the thread does not call code possibly causing a deadlock in JackEngine. // UGLY temporary way to be sure the thread does not call code possibly causing a deadlock in JackEngine.
ThreadExit(); ThreadExit();
} else { } else {
jack_error ( "Error in master receive : %s", StrError(NET_ERROR_CODE));
jack_error("Error in master receive : %s", StrError(NET_ERROR_CODE));
} }
} }


@@ -374,7 +374,7 @@ namespace Jack
net_error_t error = fSocket.GetError(); net_error_t error = fSocket.GetError();
if (error == NET_CONN_ERROR) { if (error == NET_CONN_ERROR) {
//fatal connection issue, exit //fatal connection issue, exit
jack_error ("'%s' : %s, exiting.", fParams.fName, StrError (NET_ERROR_CODE));
jack_error("'%s' : %s, exiting", fParams.fName, StrError(NET_ERROR_CODE));
Exit(); Exit();


// UGLY temporary way to be sure the thread does not call code possibly causing a deadlock in JackEngine. // UGLY temporary way to be sure the thread does not call code possibly causing a deadlock in JackEngine.
@@ -861,7 +861,7 @@ namespace Jack
jack_error ( "No data, is the master still running ?" ); jack_error ( "No data, is the master still running ?" );
//if a network error occurs, this exception will restart the driver //if a network error occurs, this exception will restart the driver
} else if ( error == NET_CONN_ERROR ) { } else if ( error == NET_CONN_ERROR ) {
jack_error ( "Connection lost." );
jack_error ( "Recv connection lost" );
throw JackNetException(); throw JackNetException();
} else { } else {
jack_error ( "Fatal error in slave receive : %s", StrError ( NET_ERROR_CODE ) ); jack_error ( "Fatal error in slave receive : %s", StrError ( NET_ERROR_CODE ) );
@@ -885,7 +885,7 @@ namespace Jack
net_error_t error = fSocket.GetError(); net_error_t error = fSocket.GetError();
//if a network error occurs, this exception will restart the driver //if a network error occurs, this exception will restart the driver
if ( error == NET_CONN_ERROR ) { if ( error == NET_CONN_ERROR ) {
jack_error ( "Connection lost." );
jack_error ( "Send connection lost" );
throw JackNetException(); throw JackNetException();
} else { } else {
jack_error ( "Fatal error in slave send : %s", StrError ( NET_ERROR_CODE ) ); jack_error ( "Fatal error in slave send : %s", StrError ( NET_ERROR_CODE ) );
@@ -954,7 +954,7 @@ namespace Jack
break; break;


case 's': //sync case 's': //sync
jack_info ( "NetSlave : overloaded, skipping receive." );
jack_info("NetSlave : overloaded, skipping receive");
// TODO : finish midi and audio rendering ? // TODO : finish midi and audio rendering ?
fNetAudioCaptureBuffer->RenderToJackPorts(); fNetAudioCaptureBuffer->RenderToJackPorts();
return 0; return 0;


+ 22
- 22
common/JackNetManager.cpp View File

@@ -92,7 +92,7 @@ namespace Jack


JackNetMaster::~JackNetMaster() JackNetMaster::~JackNetMaster()
{ {
jack_log ( "JackNetMaster::~JackNetMaster, ID %u.", fParams.fID );
jack_log ( "JackNetMaster::~JackNetMaster, ID %u", fParams.fID );


if ( fJackClient ) if ( fJackClient )
{ {
@@ -113,7 +113,7 @@ namespace Jack
bool JackNetMaster::Init(bool auto_connect) bool JackNetMaster::Init(bool auto_connect)
{ {
//network init //network init
if (!JackNetMasterInterface::Init()){
if (!JackNetMasterInterface::Init()) {
jack_error("JackNetMasterInterface::Init() error..." ); jack_error("JackNetMasterInterface::Init() error..." );
return false; return false;
} }
@@ -128,7 +128,7 @@ namespace Jack
jack_status_t status; jack_status_t status;
if ( ( fJackClient = jack_client_open ( fClientName, JackNullOption, &status, NULL ) ) == NULL ) if ( ( fJackClient = jack_client_open ( fClientName, JackNullOption, &status, NULL ) ) == NULL )
{ {
jack_error ( "Can't open a new jack client." );
jack_error ( "Can't open a new jack client" );
return false; return false;
} }


@@ -140,7 +140,7 @@ namespace Jack


if ( AllocPorts() != 0 ) if ( AllocPorts() != 0 )
{ {
jack_error ( "Can't allocate jack ports." );
jack_error ( "Can't allocate jack ports" );
goto fail; goto fail;
} }


@@ -150,13 +150,13 @@ namespace Jack
//finally activate jack client //finally activate jack client
if ( jack_activate ( fJackClient ) != 0 ) if ( jack_activate ( fJackClient ) != 0 )
{ {
jack_error ( "Can't activate jack client." );
jack_error ( "Can't activate jack client" );
goto fail; goto fail;
} }


if (auto_connect) if (auto_connect)
ConnectPorts(); ConnectPorts();
jack_info ( "New NetMaster started." );
jack_info ( "New NetMaster started" );
return true; return true;


fail: fail:
@@ -314,17 +314,17 @@ namespace Jack
case RELEASE_TIMEBASEMASTER : case RELEASE_TIMEBASEMASTER :
timebase = jack_release_timebase ( fJackClient ); timebase = jack_release_timebase ( fJackClient );
if ( timebase < 0 ) if ( timebase < 0 )
jack_error ( "Can't release timebase master." );
jack_error ( "Can't release timebase master" );
else else
jack_info ( "'%s' isn't the timebase master anymore.", fParams.fName );
jack_info ( "'%s' isn't the timebase master anymore", fParams.fName );
break; break;


case TIMEBASEMASTER : case TIMEBASEMASTER :
timebase = jack_set_timebase_callback ( fJackClient, 0, SetTimebaseCallback, this ); timebase = jack_set_timebase_callback ( fJackClient, 0, SetTimebaseCallback, this );
if ( timebase < 0 ) if ( timebase < 0 )
jack_error ( "Can't set a new timebase master." );
jack_error ( "Can't set a new timebase master" );
else else
jack_info ( "'%s' is the new timebase master.", fParams.fName );
jack_info ( "'%s' is the new timebase master", fParams.fName );
break; break;


case CONDITIONAL_TIMEBASEMASTER : case CONDITIONAL_TIMEBASEMASTER :
@@ -332,9 +332,9 @@ namespace Jack
if ( timebase != EBUSY ) if ( timebase != EBUSY )
{ {
if ( timebase < 0 ) if ( timebase < 0 )
jack_error ( "Can't set a new timebase master." );
jack_error ( "Can't set a new timebase master" );
else else
jack_info ( "'%s' is the new timebase master.", fParams.fName );
jack_info ( "'%s' is the new timebase master", fParams.fName );
} }
break; break;
} }
@@ -347,22 +347,22 @@ namespace Jack
{ {
case JackTransportStopped : case JackTransportStopped :
jack_transport_stop ( fJackClient ); jack_transport_stop ( fJackClient );
jack_info ( "'%s' stops transport.", fParams.fName );
jack_info ( "'%s' stops transport", fParams.fName );
break; break;


case JackTransportStarting : case JackTransportStarting :
if ( jack_transport_reposition ( fJackClient, &fReturnTransportData.fPosition ) == EINVAL ) if ( jack_transport_reposition ( fJackClient, &fReturnTransportData.fPosition ) == EINVAL )
jack_error ( "Can't set new position." );
jack_error ( "Can't set new position" );
jack_transport_start ( fJackClient ); jack_transport_start ( fJackClient );
jack_info ( "'%s' starts transport frame = %d", fParams.fName, fReturnTransportData.fPosition.frame); jack_info ( "'%s' starts transport frame = %d", fParams.fName, fReturnTransportData.fPosition.frame);
break; break;


case JackTransportNetStarting : case JackTransportNetStarting :
jack_info ( "'%s' is ready to roll..", fParams.fName );
jack_info ( "'%s' is ready to roll...", fParams.fName );
break; break;


case JackTransportRolling : case JackTransportRolling :
jack_info ( "'%s' is rolling.", fParams.fName );
jack_info ( "'%s' is rolling", fParams.fName );
break; break;
} }
} }
@@ -526,11 +526,11 @@ namespace Jack


//activate the client (for sync callback) //activate the client (for sync callback)
if ( jack_activate ( fManagerClient ) != 0 ) if ( jack_activate ( fManagerClient ) != 0 )
jack_error ( "Can't activate the network manager client, transport disabled." );
jack_error ( "Can't activate the network manager client, transport disabled" );


//launch the manager thread //launch the manager thread
if ( jack_client_create_thread ( fManagerClient, &fManagerThread, 0, 0, NetManagerThread, this ) ) if ( jack_client_create_thread ( fManagerClient, &fManagerThread, 0, 0, NetManagerThread, this ) )
jack_error ( "Can't create the network manager control thread." );
jack_error ( "Can't create the network manager control thread" );
} }


JackNetMasterManager::~JackNetMasterManager() JackNetMasterManager::~JackNetMasterManager()
@@ -579,7 +579,7 @@ namespace Jack
void* JackNetMasterManager::NetManagerThread ( void* arg ) void* JackNetMasterManager::NetManagerThread ( void* arg )
{ {
JackNetMasterManager* master_manager = static_cast<JackNetMasterManager*> ( arg ); JackNetMasterManager* master_manager = static_cast<JackNetMasterManager*> ( arg );
jack_info ( "Starting Jack Network Manager." );
jack_info ( "Starting Jack Network Manager" );
jack_info ( "Listening on '%s:%d'", master_manager->fMulticastIP, master_manager->fSocket.GetPort() ); jack_info ( "Listening on '%s:%d'", master_manager->fMulticastIP, master_manager->fSocket.GetPort() );
master_manager->Run(); master_manager->Run();
return NULL; return NULL;
@@ -641,7 +641,7 @@ namespace Jack
jack_error ( "Error in receive : %s", StrError ( NET_ERROR_CODE ) ); jack_error ( "Error in receive : %s", StrError ( NET_ERROR_CODE ) );
if ( ++attempt == 10 ) if ( ++attempt == 10 )
{ {
jack_error ( "Can't receive on the socket, exiting net manager." );
jack_error ( "Can't receive on the socket, exiting net manager" );
return; return;
} }
} }
@@ -718,7 +718,7 @@ namespace Jack


master_list_it_t JackNetMasterManager::FindMaster ( uint32_t id ) master_list_it_t JackNetMasterManager::FindMaster ( uint32_t id )
{ {
jack_log ( "JackNetMasterManager::FindMaster, ID %u.", id );
jack_log ( "JackNetMasterManager::FindMaster, ID %u", id );


master_list_it_t it; master_list_it_t it;
for ( it = fMasterList.begin(); it != fMasterList.end(); it++ ) for ( it = fMasterList.begin(); it != fMasterList.end(); it++ )
@@ -729,7 +729,7 @@ namespace Jack


int JackNetMasterManager::KillMaster ( session_params_t* params ) int JackNetMasterManager::KillMaster ( session_params_t* params )
{ {
jack_log ( "JackNetMasterManager::KillMaster, ID %u.", params->fID );
jack_log ( "JackNetMasterManager::KillMaster, ID %u", params->fID );


master_list_it_t master = FindMaster ( params->fID ); master_list_it_t master = FindMaster ( params->fID );
if ( master != fMasterList.end() ) if ( master != fMasterList.end() )


+ 20
- 19
posix/JackNetUnixSocket.cpp View File

@@ -99,13 +99,13 @@ namespace Jack
Reset(); Reset();
} }
fSockfd = socket ( AF_INET, SOCK_DGRAM, 0 ); fSockfd = socket ( AF_INET, SOCK_DGRAM, 0 );
/* Enable address reuse */ /* Enable address reuse */
int res, on = 1; int res, on = 1;
if ((res = setsockopt( fSockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) < 0) { if ((res = setsockopt( fSockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) < 0) {
StrError(NET_ERROR_CODE); StrError(NET_ERROR_CODE);
} }
return fSockfd; return fSockfd;
} }


@@ -230,12 +230,12 @@ namespace Jack
{ {
int flags; int flags;
fTimeOut = us; fTimeOut = us;
if ((flags = fcntl(fSockfd, F_GETFL, 0)) < 0) { if ((flags = fcntl(fSockfd, F_GETFL, 0)) < 0) {
jack_error("JackNetUnixSocket::SetTimeOut error in fcntl F_GETFL"); jack_error("JackNetUnixSocket::SetTimeOut error in fcntl F_GETFL");
return -1; return -1;
} }
flags |= O_NONBLOCK; flags |= O_NONBLOCK;
if (fcntl(fSockfd, F_SETFL, flags) < 0) { if (fcntl(fSockfd, F_SETFL, flags) < 0) {
jack_error("JackNetUnixSocket::SetTimeOut error in fcntl F_SETFL"); jack_error("JackNetUnixSocket::SetTimeOut error in fcntl F_SETFL");
@@ -252,17 +252,17 @@ namespace Jack
struct timeval tv; struct timeval tv;
fd_set fdset; fd_set fdset;
ssize_t res; ssize_t res;
tv.tv_sec = fTimeOut / 1000000; tv.tv_sec = fTimeOut / 1000000;
tv.tv_usec = fTimeOut % 1000000; tv.tv_usec = fTimeOut % 1000000;
FD_ZERO(&fdset); FD_ZERO(&fdset);
FD_SET(fSockfd, &fdset); FD_SET(fSockfd, &fdset);
do { do {
res = select(fSockfd + 1, &fdset, NULL, NULL, &tv); res = select(fSockfd + 1, &fdset, NULL, NULL, &tv);
} while (res < 0 && errno == EINTR); } while (res < 0 && errno == EINTR);
if (res < 0) { if (res < 0) {
return res; return res;
} else if (res == 0) { } else if (res == 0) {
@@ -281,17 +281,17 @@ namespace Jack
struct timeval tv; struct timeval tv;
fd_set fdset; fd_set fdset;
ssize_t res; ssize_t res;
tv.tv_sec = fTimeOut / 1000000; tv.tv_sec = fTimeOut / 1000000;
tv.tv_usec = fTimeOut % 1000000;
tv.tv_usec = fTimeOut % 1000000;
FD_ZERO(&fdset); FD_ZERO(&fdset);
FD_SET(fSockfd, &fdset); FD_SET(fSockfd, &fdset);
do { do {
res = select(fSockfd + 1, NULL, &fdset, NULL, &tv); res = select(fSockfd + 1, NULL, &fdset, NULL, &tv);
} while (res < 0 && errno == EINTR); } while (res < 0 && errno == EINTR);
if (res < 0) { if (res < 0) {
return res; return res;
} else if (res == 0) { } else if (res == 0) {
@@ -375,7 +375,7 @@ namespace Jack
#if defined(__sun__) || defined(sun) #if defined(__sun__) || defined(sun)
if (WaitRead() < 0) if (WaitRead() < 0)
return -1; return -1;
#endif
#endif
return recvfrom ( fSockfd, buffer, nbytes, flags, reinterpret_cast<socket_address_t*> ( &fRecvAddr ), &addr_len ); return recvfrom ( fSockfd, buffer, nbytes, flags, reinterpret_cast<socket_address_t*> ( &fRecvAddr ), &addr_len );
} }


@@ -384,7 +384,7 @@ namespace Jack
#if defined(__sun__) || defined(sun) #if defined(__sun__) || defined(sun)
if (WaitRead() < 0) if (WaitRead() < 0)
return -1; return -1;
#endif
#endif
return recv ( fSockfd, buffer, nbytes, flags ); return recv ( fSockfd, buffer, nbytes, flags );
} }


@@ -394,7 +394,7 @@ namespace Jack
#if defined(__sun__) || defined(sun) #if defined(__sun__) || defined(sun)
if (WaitRead() < 0) if (WaitRead() < 0)
return -1; return -1;
#endif
#endif
return recvfrom ( fSockfd, buffer, nbytes, flags, reinterpret_cast<socket_address_t*> ( &fSendAddr ), &addr_len ); return recvfrom ( fSockfd, buffer, nbytes, flags, reinterpret_cast<socket_address_t*> ( &fSendAddr ), &addr_len );
} }


@@ -405,7 +405,7 @@ namespace Jack
case EAGAIN: case EAGAIN:
case ETIMEDOUT: case ETIMEDOUT:
return NET_NO_DATA; return NET_NO_DATA;
case ECONNABORTED: case ECONNABORTED:
case ECONNREFUSED: case ECONNREFUSED:
case ECONNRESET: case ECONNRESET:
@@ -415,9 +415,10 @@ namespace Jack
case ENETDOWN: case ENETDOWN:
case ENETUNREACH: case ENETUNREACH:
return NET_CONN_ERROR; return NET_CONN_ERROR;
default: default:
return NET_OP_ERROR;
//return NET_OP_ERROR;
return NET_CONN_ERROR;
} }
} }
} }

Loading…
Cancel
Save