diff --git a/common/JackNetManager.cpp b/common/JackNetManager.cpp index b9690ea3..14ae3776 100644 --- a/common/JackNetManager.cpp +++ b/common/JackNetManager.cpp @@ -414,31 +414,28 @@ namespace Jack if (!fRunning) return 0; - int port_index; - int res = 0; - #ifdef JACK_MONITOR jack_time_t begin_time = GetMicroSeconds(); fNetTimeMon->New(); #endif //buffers - for (port_index = 0; port_index < fParams.fSendMidiChannels; port_index++) { + for (int port_index = 0; port_index < fParams.fSendMidiChannels; port_index++) { fNetMidiCaptureBuffer->SetBuffer(port_index, static_cast(jack_port_get_buffer(fMidiCapturePorts[port_index], fParams.fPeriodSize))); } - for (port_index = 0; port_index < fParams.fSendAudioChannels; port_index++) { + for (int port_index = 0; port_index < fParams.fSendAudioChannels; port_index++) { fNetAudioCaptureBuffer->SetBuffer(port_index, static_cast(jack_port_get_buffer(fAudioCapturePorts[port_index], fParams.fPeriodSize))); } - for (port_index = 0; port_index < fParams.fReturnMidiChannels; port_index++) { + for (int port_index = 0; port_index < fParams.fReturnMidiChannels; port_index++) { fNetMidiPlaybackBuffer->SetBuffer(port_index, static_cast(jack_port_get_buffer(fMidiPlaybackPorts[port_index], fParams.fPeriodSize))); } - for (port_index = 0; port_index < fParams.fReturnAudioChannels; port_index++) { + for (int port_index = 0; port_index < fParams.fReturnAudioChannels; port_index++) { fNetAudioPlaybackBuffer->SetBuffer(port_index, static_cast(jack_port_get_buffer(fAudioPlaybackPorts[port_index], fParams.fPeriodSize))); @@ -450,16 +447,47 @@ namespace Jack EncodeSyncPacket(); //send sync - if (SyncSend() == SOCKET_ERROR) - return SOCKET_ERROR; + switch (SyncSend()) { + + case 0: + jack_error("Connection is not yet synched, skip cycle..."); + return 0; + + case SOCKET_ERROR: + jack_error("Connection is lost, quit master..."); + //ask to the manager to properly remove the master + Exit(); + //UGLY temporary way to be sure the thread does not call code possibly causing a deadlock in JackEngine. + ThreadExit(); + break; + + default: + break; + } #ifdef JACK_MONITOR fNetTimeMon->Add((((float) (GetMicroSeconds() - begin_time)) / (float) fPeriodUsecs ) * 100.f); #endif //send data - if (DataSend() == SOCKET_ERROR) - return SOCKET_ERROR; + switch (DataSend()) { + + case 0: + jack_error("Connection is not yet synched, skip cycle..."); + return 0; + + case SOCKET_ERROR: + jack_error("Connection is lost, quit master..."); + //ask to the manager to properly remove the master + Exit(); + //UGLY temporary way to be sure the thread does not call code possibly causing a deadlock in JackEngine. + ThreadExit(); + break; + + default: + break; + } + #ifdef JACK_MONITOR fNetTimeMon->Add((((float) (GetMicroSeconds() - begin_time)) / (float) fPeriodUsecs) * 100.f); @@ -470,12 +498,11 @@ namespace Jack } //receive sync - res = SyncRecv(); - switch (res) { + switch (SyncRecv()) { case 0: jack_error("Connection is not yet synched, skip cycle..."); - return res; + return 0; case SOCKET_ERROR: jack_error("Connection is lost, quit master..."); @@ -497,12 +524,11 @@ namespace Jack DecodeSyncPacket(); //receive data - res = DataRecv(); - switch (res) { + switch (DataRecv()) { case 0: jack_error("Connection is not yet synched, skip cycle..."); - return res; + return 0; case SOCKET_ERROR: jack_error("Connection is lost, quit master...");