Improve server shutdown and stop.
This commit is contained in:
parent
d8a6bc4de6
commit
e32b0cd318
|
@ -88,13 +88,15 @@ JackClient::JackClient(JackSynchro* table):fThread(this)
|
|||
JackClient::~JackClient()
|
||||
{}
|
||||
|
||||
void JackClient::ShutDown()
|
||||
void JackClient::ShutDown(const char* message)
|
||||
{
|
||||
jack_log("JackClient::ShutDown");
|
||||
|
||||
// If "fInfoShutdown" callback, then call it
|
||||
if (fInfoShutdown) {
|
||||
fInfoShutdown(JackFailure, "JACK server has been closed", fInfoShutdownArg);
|
||||
fInfoShutdown(JackFailure, message, fInfoShutdownArg);
|
||||
fInfoShutdown = NULL;
|
||||
// Otherwise possibly call the normal "fShutdown"
|
||||
} else if (fShutdown) {
|
||||
fShutdown(fShutdownArg);
|
||||
fShutdown = NULL;
|
||||
|
@ -296,10 +298,7 @@ int JackClient::ClientNotify(int refnum, const char* name, int notify, int sync,
|
|||
|
||||
case kShutDownCallback:
|
||||
jack_log("JackClient::kShutDownCallback");
|
||||
if (fInfoShutdown) {
|
||||
fInfoShutdown((jack_status_t)value1, message, fInfoShutdownArg);
|
||||
fInfoShutdown = NULL;
|
||||
}
|
||||
ShutDown(message);
|
||||
break;
|
||||
|
||||
case kSessionCallback:
|
||||
|
@ -660,7 +659,7 @@ inline void JackClient::Error()
|
|||
fThread.DropSelfRealTime();
|
||||
GetClientControl()->fActive = false;
|
||||
fChannel->ClientDeactivate(GetClientControl()->fRefNum, &result);
|
||||
ShutDown();
|
||||
ShutDown(JACK_SERVER_FAILURE);
|
||||
fThread.Terminate();
|
||||
}
|
||||
|
||||
|
|
|
@ -143,7 +143,7 @@ class SERVER_EXPORT JackClient : public JackClientInterface, public JackRunnable
|
|||
virtual int SetBufferSize(jack_nframes_t buffer_size);
|
||||
virtual int SetFreeWheel(int onoff);
|
||||
virtual int ComputeTotalLatencies();
|
||||
virtual void ShutDown();
|
||||
virtual void ShutDown(const char* message);
|
||||
virtual jack_native_thread_t GetThreadID();
|
||||
|
||||
// Port management
|
||||
|
|
|
@ -75,6 +75,8 @@
|
|||
#define FREEWHEEL_DRIVER_TIMEOUT 10 // in sec
|
||||
#define DRIVER_TIMEOUT_FACTOR 10
|
||||
|
||||
#define JACK_SERVER_FAILURE "JACK server has been closed"
|
||||
|
||||
|
||||
#define NO_PORT 0xFFFE
|
||||
|
||||
|
|
|
@ -363,10 +363,10 @@ ShutDown is called:
|
|||
(Not needed since the synch object used (Sema of Fifo will fails when server quits... see ShutDown))
|
||||
*/
|
||||
|
||||
void JackDebugClient::ShutDown()
|
||||
void JackDebugClient::ShutDown(const char* message)
|
||||
{
|
||||
CheckClient("ShutDown");
|
||||
fClient->ShutDown();
|
||||
fClient->ShutDown(message);
|
||||
}
|
||||
|
||||
//---------------------
|
||||
|
|
|
@ -84,7 +84,7 @@ class JackDebugClient : public JackClient
|
|||
int SetBufferSize(jack_nframes_t buffer_size);
|
||||
int SetFreeWheel(int onoff);
|
||||
int ComputeTotalLatencies();
|
||||
void ShutDown();
|
||||
void ShutDown(const char* message);
|
||||
jack_native_thread_t GetThreadID();
|
||||
|
||||
// Port management
|
||||
|
|
|
@ -110,10 +110,10 @@ error:
|
|||
return -1;
|
||||
}
|
||||
|
||||
void JackInternalClient::ShutDown()
|
||||
void JackInternalClient::ShutDown(const char* message)
|
||||
{
|
||||
jack_log("JackInternalClient::ShutDown");
|
||||
JackClient::ShutDown();
|
||||
JackClient::ShutDown(message);
|
||||
}
|
||||
|
||||
JackGraphManager* JackInternalClient::GetGraphManager() const
|
||||
|
|
|
@ -47,7 +47,7 @@ class JackInternalClient : public JackClient
|
|||
virtual ~JackInternalClient();
|
||||
|
||||
int Open(const char* server_name, const char* name, int uuid, jack_options_t options, jack_status_t* status);
|
||||
void ShutDown();
|
||||
void ShutDown(const char* message);
|
||||
|
||||
JackGraphManager* GetGraphManager() const;
|
||||
JackEngineControl* GetEngineControl() const;
|
||||
|
|
|
@ -62,11 +62,11 @@ ShutDown is called:
|
|||
(Not needed since the synch object used (Sema of Fifo will fails when server quits... see ShutDown))
|
||||
*/
|
||||
|
||||
void JackLibClient::ShutDown()
|
||||
void JackLibClient::ShutDown(const char* message)
|
||||
{
|
||||
jack_log("JackLibClient::ShutDown");
|
||||
JackGlobals::fServerRunning = false;
|
||||
JackClient::ShutDown();
|
||||
JackClient::ShutDown(message);
|
||||
}
|
||||
|
||||
JackLibClient::JackLibClient(JackSynchro* table): JackClient(table)
|
||||
|
|
|
@ -45,7 +45,7 @@ class JackLibClient : public JackClient
|
|||
virtual ~JackLibClient();
|
||||
|
||||
int Open(const char* server_name, const char* name, int uuid, jack_options_t options, jack_status_t* status);
|
||||
void ShutDown();
|
||||
void ShutDown(const char* message);
|
||||
|
||||
int ClientNotifyImp(int refnum, const char* name, int notify, int sync, const char* message, int value1, int value2);
|
||||
|
||||
|
|
|
@ -160,17 +160,13 @@ int JackServer::Start()
|
|||
int JackServer::Stop()
|
||||
{
|
||||
jack_log("JackServer::Stop");
|
||||
int res = (fFreewheel) ? fThreadedFreewheelDriver->Stop() : fAudioDriver->Stop();
|
||||
|
||||
fEngine->NotifyQuit();
|
||||
fRequestChannel.Stop();
|
||||
fEngine->NotifyFailure(JackFailure, JACK_SERVER_FAILURE);
|
||||
|
||||
fEngine->NotifyFailure(JackFailure, "JACK server has been closed");
|
||||
|
||||
if (fFreewheel) {
|
||||
return fThreadedFreewheelDriver->Stop();
|
||||
} else {
|
||||
return fAudioDriver->Stop();
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
bool JackServer::IsRunning()
|
||||
|
|
|
@ -146,7 +146,7 @@ bool JackSocketClientChannel::Execute()
|
|||
|
||||
error:
|
||||
fNotificationSocket->Close();
|
||||
fClient->ShutDown();
|
||||
fClient->ShutDown(JACK_SERVER_FAILURE);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -150,7 +150,7 @@ error:
|
|||
// Close the pipes, server wont be able to create them otherwise.
|
||||
fNotificationListenPipe.Close();
|
||||
fRequest->Close();
|
||||
fClient->ShutDown();
|
||||
fClient->ShutDown(JACK_SERVER_FAILURE);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue