Improve server shutdown and stop.

This commit is contained in:
Stephane Letz 2013-01-25 13:51:56 +01:00
parent d8a6bc4de6
commit e32b0cd318
12 changed files with 23 additions and 26 deletions

View File

@ -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();
}

View File

@ -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

View File

@ -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

View File

@ -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);
}
//---------------------

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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)

View File

@ -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);

View File

@ -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()

View File

@ -146,7 +146,7 @@ bool JackSocketClientChannel::Execute()
error:
fNotificationSocket->Close();
fClient->ShutDown();
fClient->ShutDown(JACK_SERVER_FAILURE);
return false;
}

View File

@ -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;
}