Browse Source

Libjack shutdown handler does not deactivate (fActive = false) the client anymore, so that jack_deactivate correctly does the job later on.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@3088 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.1
sletz 16 years ago
parent
commit
c29ab689bf
4 changed files with 22 additions and 14 deletions
  1. +4
    -0
      ChangeLog
  2. +10
    -11
      common/JackClient.cpp
  3. +2
    -2
      common/JackClient.h
  4. +6
    -1
      common/jack/types.h

+ 4
- 0
ChangeLog View File

@@ -23,6 +23,10 @@ Michael Voigt
Jackdmp changes log Jackdmp changes log
--------------------------- ---------------------------


2008-11-19 Stephane Letz <letz@grame.fr>

* Libjack shutdown handler does not "deactivate" (fActive = false) the client anymore, so that jack_deactivate correctly does the job later on.

2008-11-14 Stephane Letz <letz@grame.fr> 2008-11-14 Stephane Letz <letz@grame.fr>


* Version 1.9.1 started, fix symbols export in ringbuffer.c, cleanup on Windows. * Version 1.9.1 started, fix symbols export in ringbuffer.c, cleanup on Windows.


+ 10
- 11
common/JackClient.cpp View File

@@ -407,17 +407,17 @@ jack_nframes_t JackClient::Wait(int status)
CallTimebaseCallback(); CallTimebaseCallback();
SignalSync(); SignalSync();
if (status != 0) if (status != 0)
return End();
End(); // Terminates the thread
if (!WaitSync()) if (!WaitSync())
return Error();
Error(); // Terminates the thread
CallSyncCallback(); CallSyncCallback();
return GetEngineControl()->fBufferSize; return GetEngineControl()->fBufferSize;
} }


jack_nframes_t JackClient::CycleWait() jack_nframes_t JackClient::CycleWait()
{ {
if (!WaitSync())
return Error();
if (!WaitSync())
Error(); // Terminates the thread
CallSyncCallback(); CallSyncCallback();
return GetEngineControl()->fBufferSize; return GetEngineControl()->fBufferSize;
} }
@@ -427,8 +427,8 @@ void JackClient::CycleSignal(int status)
if (status == 0) if (status == 0)
CallTimebaseCallback(); CallTimebaseCallback();
SignalSync(); SignalSync();
if (status != 0)
End();
if (status != 0)
End(); // Terminates the thread
} }


inline int JackClient::CallProcessCallback() inline int JackClient::CallProcessCallback()
@@ -455,7 +455,7 @@ inline void JackClient::SignalSync()
} }
} }


inline int JackClient::End()
inline void JackClient::End()
{ {
jack_log("JackClient::Execute end name = %s", GetClientControl()->fName); jack_log("JackClient::Execute end name = %s", GetClientControl()->fName);
// Hum... not sure about this, the following "close" code is called in the RT thread... // Hum... not sure about this, the following "close" code is called in the RT thread...
@@ -463,10 +463,10 @@ inline int JackClient::End()
fThread.DropRealTime(); fThread.DropRealTime();
GetClientControl()->fActive = false; GetClientControl()->fActive = false;
fChannel->ClientDeactivate(GetClientControl()->fRefNum, &result); fChannel->ClientDeactivate(GetClientControl()->fRefNum, &result);
return 0;
fThread.Terminate();
} }


inline int JackClient::Error()
inline void JackClient::Error()
{ {
jack_error("JackClient::Execute error name = %s", GetClientControl()->fName); jack_error("JackClient::Execute error name = %s", GetClientControl()->fName);
// Hum... not sure about this, the following "close" code is called in the RT thread... // Hum... not sure about this, the following "close" code is called in the RT thread...
@@ -475,7 +475,7 @@ inline int JackClient::Error()
GetClientControl()->fActive = false; GetClientControl()->fActive = false;
fChannel->ClientDeactivate(GetClientControl()->fRefNum, &result); fChannel->ClientDeactivate(GetClientControl()->fRefNum, &result);
ShutDown(); ShutDown();
return 0;
fThread.Terminate();
} }


//----------------- //-----------------
@@ -600,7 +600,6 @@ void JackClient::ShutDown()
// Be sure client is already started // Be sure client is already started
if (GetClientControl()) { if (GetClientControl()) {
GetClientControl()->fServer = false; GetClientControl()->fServer = false;
GetClientControl()->fActive = false;
} }
if (fShutdown) { if (fShutdown) {


+ 2
- 2
common/JackClient.h View File

@@ -104,8 +104,8 @@ class JackClient : public JackClientInterface, public JackRunnableInterface
inline bool WaitSync(); inline bool WaitSync();
inline void SignalSync(); inline void SignalSync();
inline int CallProcessCallback(); inline int CallProcessCallback();
inline int End();
inline int Error();
inline void End();
inline void Error();


public: public:




+ 6
- 1
common/jack/types.h View File

@@ -216,7 +216,12 @@ typedef void (*JackFreewheelCallback)(int starting, void *arg);


/** /**
* Prototype for the client supplied function that is called * Prototype for the client supplied function that is called
* whenever jackd is shutdown.
* whenever jackd is shutdown. Note that after server shutdown,
* the client pointer is *not* deallocated by libjack,
* the application is responsible to properly use jack_client_close()
* to release client ressources. Warning: jack_client_close() cannot be
* safely used inside the shutdown callback and has to be called outside of
* the callback context.
* *
* @param arg pointer to a client supplied structure * @param arg pointer to a client supplied structure
*/ */


Loading…
Cancel
Save