Browse Source

Tim Blechmann patch to remove unnecessary virtual methods : choice of the appropriate platform version is now done at compilation time.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2429 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 17 years ago
parent
commit
215dfdd97a
96 changed files with 834 additions and 1883 deletions
  1. +4
    -0
      ChangeLog
  2. +1
    -1
      common/JackActivationCount.h
  3. +1
    -1
      common/JackAudioDriver.cpp
  4. +1
    -1
      common/JackAudioDriver.h
  5. +3
    -83
      common/JackChannel.h
  6. +19
    -20
      common/JackClient.cpp
  7. +9
    -8
      common/JackClient.h
  8. +4
    -4
      common/JackConnectionManager.cpp
  9. +2
    -2
      common/JackConnectionManager.h
  10. +3
    -3
      common/JackDriver.cpp
  11. +3
    -3
      common/JackDriver.h
  12. +2
    -2
      common/JackDriverLoader.h
  13. +1
    -1
      common/JackDummyDriver.cpp
  14. +1
    -1
      common/JackDummyDriver.h
  15. +19
    -24
      common/JackEngine.cpp
  16. +6
    -6
      common/JackEngine.h
  17. +3
    -5
      common/JackExternalClient.cpp
  18. +2
    -2
      common/JackExternalClient.h
  19. +2
    -4
      common/JackFifo.h
  20. +1
    -1
      common/JackFreewheelDriver.h
  21. +0
    -56
      common/JackGlobals.cpp
  22. +3
    -230
      common/JackGlobals.h
  23. +0
    -485
      common/JackGlobalsClient.cpp
  24. +0
    -492
      common/JackGlobalsServer.cpp
  25. +2
    -2
      common/JackGraphManager.cpp
  26. +3
    -2
      common/JackGraphManager.h
  27. +3
    -3
      common/JackInternalClient.cpp
  28. +2
    -3
      common/JackInternalClient.h
  29. +1
    -1
      common/JackInternalClientChannel.h
  30. +7
    -8
      common/JackLibClient.cpp
  31. +1
    -1
      common/JackLibClient.h
  32. +3
    -7
      common/JackLibGlobals.h
  33. +1
    -1
      common/JackLockedEngine.h
  34. +1
    -1
      common/JackLoopbackDriver.h
  35. +8
    -11
      common/JackMessageBuffer.cpp
  36. +4
    -4
      common/JackMessageBuffer.h
  37. +59
    -0
      common/JackPlatformClientChannel.h
  38. +59
    -0
      common/JackPlatformNotifyChannel.h
  39. +51
    -0
      common/JackPlatformProcessSync.h
  40. +59
    -0
      common/JackPlatformServerChannel.h
  41. +59
    -0
      common/JackPlatformServerNotifyChannel.h
  42. +64
    -0
      common/JackPlatformSynchro.h
  43. +59
    -0
      common/JackPlatformThread.h
  44. +2
    -4
      common/JackPosixSemaphore.h
  45. +10
    -16
      common/JackPosixThread.h
  46. +7
    -7
      common/JackProcessSync.h
  47. +7
    -14
      common/JackServer.cpp
  48. +8
    -6
      common/JackServer.h
  49. +4
    -4
      common/JackServerLaunch.cpp
  50. +5
    -5
      common/JackSocketClientChannel.cpp
  51. +5
    -3
      common/JackSocketClientChannel.h
  52. +1
    -3
      common/JackSocketNotifyChannel.h
  53. +4
    -5
      common/JackSocketServerChannel.cpp
  54. +4
    -4
      common/JackSocketServerChannel.h
  55. +1
    -3
      common/JackSocketServerNotifyChannel.h
  56. +0
    -52
      common/JackSyncInterface.h
  57. +15
    -13
      common/JackSynchro.h
  58. +7
    -16
      common/JackThread.h
  59. +11
    -12
      common/JackThreadedDriver.cpp
  60. +2
    -2
      common/JackThreadedDriver.h
  61. +0
    -3
      common/SConscript
  62. +0
    -2
      common/wscript
  63. +1
    -1
      linux/alsa/JackAlsaDriver.cpp
  64. +1
    -1
      linux/alsa/JackAlsaDriver.h
  65. +1
    -1
      linux/firewire/JackFFADODriver.cpp
  66. +1
    -1
      linux/firewire/JackFFADODriver.h
  67. +1
    -1
      linux/freebob/JackFreebobDriver.cpp
  68. +1
    -1
      linux/freebob/JackFreebobDriver.h
  69. +1
    -0
      linux/wscript
  70. +2
    -2
      macosx/JackCoreAudioDriver.cpp
  71. +1
    -1
      macosx/JackCoreAudioDriver.h
  72. +5
    -9
      macosx/JackMachClientChannel.cpp
  73. +5
    -3
      macosx/JackMachClientChannel.h
  74. +1
    -3
      macosx/JackMachNotifyChannel.h
  75. +2
    -4
      macosx/JackMachSemaphore.h
  76. +5
    -10
      macosx/JackMachServerChannel.cpp
  77. +4
    -4
      macosx/JackMachServerChannel.h
  78. +1
    -3
      macosx/JackMachServerNotifyChannel.h
  79. +5
    -0
      macosx/JackMachThread.cpp
  80. +2
    -7
      macosx/JackMachThread.h
  81. +44
    -21
      macosx/Jackdmp.xcodeproj/project.pbxproj
  82. +9
    -9
      tests/testSem.cpp
  83. +7
    -8
      tests/testSynchroClient.cpp
  84. +7
    -8
      tests/testSynchroServer.cpp
  85. +66
    -86
      tests/testSynchroServerClient.cpp
  86. +1
    -1
      windows/JackPortAudioDriver.cpp
  87. +1
    -1
      windows/JackPortAudioDriver.h
  88. +5
    -8
      windows/JackWinNamedPipeClientChannel.cpp
  89. +5
    -3
      windows/JackWinNamedPipeClientChannel.h
  90. +1
    -3
      windows/JackWinNamedPipeNotifyChannel.h
  91. +8
    -14
      windows/JackWinNamedPipeServerChannel.cpp
  92. +5
    -5
      windows/JackWinNamedPipeServerChannel.h
  93. +1
    -3
      windows/JackWinNamedPipeServerNotifyChannel.h
  94. +2
    -3
      windows/JackWinProcessSync.h
  95. +2
    -4
      windows/JackWinSemaphore.h
  96. +1
    -1
      windows/JackWinThread.h

+ 4
- 0
ChangeLog View File

@@ -20,6 +20,10 @@ Fernando Lopez-Lezcano
Jackdmp changes log Jackdmp changes log
--------------------------- ---------------------------


2008-06-02 Stephane Letz <letz@grame.fr>

* Tim Blechmann patch to remove unnecessary virtual methods : choice of the appropriate platform version is now done at compilation time.

2008-06-02 Stephane Letz <letz@grame.fr> 2008-06-02 Stephane Letz <letz@grame.fr>


* Cleanup and correct wscript for example-clients. * Cleanup and correct wscript for example-clients.


+ 1
- 1
common/JackActivationCount.h View File

@@ -20,7 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef __JackActivationCount__ #ifndef __JackActivationCount__
#define __JackActivationCount__ #define __JackActivationCount__


#include "JackSynchro.h"
#include "JackPlatformSynchro.h"
#include "JackTime.h" #include "JackTime.h"
#include "JackTypes.h" #include "JackTypes.h"




+ 1
- 1
common/JackAudioDriver.cpp View File

@@ -40,7 +40,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
namespace Jack namespace Jack
{ {


JackAudioDriver::JackAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table)
JackAudioDriver::JackAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro* table)
: JackDriver(name, alias, engine, table), : JackDriver(name, alias, engine, table),
fCaptureChannels(0), fCaptureChannels(0),
fPlaybackChannels(0), fPlaybackChannels(0),


+ 1
- 1
common/JackAudioDriver.h View File

@@ -57,7 +57,7 @@ class EXPORT JackAudioDriver : public JackDriver


public: public:


JackAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table);
JackAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro* table);
virtual ~JackAudioDriver(); virtual ~JackAudioDriver();


virtual int Process(); virtual int Process();


+ 3
- 83
common/JackChannel.h View File

@@ -31,6 +31,8 @@ class JackServer;
struct JackEngineControl; struct JackEngineControl;
class JackGraphManager; class JackGraphManager;


namespace detail
{
/*! /*!
\brief Inter process channel for server/client bidirectionnal communication : request and (receiving) notifications. \brief Inter process channel for server/client bidirectionnal communication : request and (receiving) notifications.
*/ */
@@ -120,91 +122,9 @@ class JackClientChannelInterface


virtual void InternalClientUnload(int refnum, int int_ref, int* status, int* result) virtual void InternalClientUnload(int refnum, int int_ref, int* status, int* result)
{} {}
};

/*!
\brief Inter process channel for server to client notifications.
*/

class JackNotifyChannelInterface
{

public:

JackNotifyChannelInterface()
{}
virtual ~JackNotifyChannelInterface()
{}

// Open the Server/Client connection
virtual int Open(const char* name)
{
return 0;
}
// Close the Server/Client connection
virtual void Close()
{}

/*
The "sync" parameter allows to choose between "synchronous" and "asynchronous" notification
*/
virtual void ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2, int* result)
{}

};

/*!
\brief Entry point channel for client/server communication.
*/

class JackServerChannelInterface
{

public:

JackServerChannelInterface()
{}
virtual ~JackServerChannelInterface()
{}

// Open the Server/Client connection
virtual int Open(const char* server_name, JackServer* server)
{
return 0;
}
// Close the Server/Client connection
virtual void Close()
{}
};

/*!
\brief Channel for server RT thread to request server thread communication.
*/

class JackServerNotifyChannelInterface
{

public:

JackServerNotifyChannelInterface()
{}
virtual ~JackServerNotifyChannelInterface()
{}

// Open the Server RT/Server connection
virtual int Open(const char* server_name)
{
return 0;
}
// Close the Server RT/Server connection
virtual void Close()
{}

virtual void Notify(int refnum, int notify, int value)
{}
}; };
}


} // end of namespace } // end of namespace




+ 19
- 20
common/JackClient.cpp View File

@@ -33,6 +33,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <math.h> #include <math.h>
#include <string> #include <string>
#include <algorithm> #include <algorithm>
#include "JackPlatformThread.h"


using namespace std; using namespace std;


@@ -41,12 +42,11 @@ namespace Jack


#define IsRealTime() ((fProcess != NULL) | (fThreadFun != NULL) | (fSync != NULL) | (fTimebase != NULL)) #define IsRealTime() ((fProcess != NULL) | (fThreadFun != NULL) | (fSync != NULL) | (fTimebase != NULL))
JackClient::JackClient()
JackClient::JackClient():fThread(this)
{} {}


JackClient::JackClient(JackSynchro** table)
JackClient::JackClient(JackSynchro* table):fThread(this)
{ {
fThread = JackGlobals::MakeThread(this);
fSynchroTable = table; fSynchroTable = table;
fProcess = NULL; fProcess = NULL;
fGraphOrder = NULL; fGraphOrder = NULL;
@@ -78,7 +78,6 @@ JackClient::JackClient(JackSynchro** table)


JackClient::~JackClient() JackClient::~JackClient()
{ {
delete fThread;
} }


int JackClient::Close() int JackClient::Close()
@@ -89,7 +88,7 @@ int JackClient::Close()
fChannel->Stop(); // Channels is stopped first to avoid receiving notifications while closing fChannel->Stop(); // Channels is stopped first to avoid receiving notifications while closing
fChannel->ClientClose(GetClientControl()->fRefNum, &result); fChannel->ClientClose(GetClientControl()->fRefNum, &result);
fChannel->Close(); fChannel->Close();
fSynchroTable[GetClientControl()->fRefNum]->Disconnect();
fSynchroTable[GetClientControl()->fRefNum].Disconnect();
return result; return result;
} }


@@ -100,7 +99,7 @@ bool JackClient::IsActive()


pthread_t JackClient::GetThreadID() pthread_t JackClient::GetThreadID()
{ {
return fThread->GetThreadID();
return fThread.GetThreadID();
} }


/*! /*!
@@ -112,14 +111,14 @@ void JackClient::SetupDriverSync(bool freewheel)
{ {
if (!freewheel && !GetEngineControl()->fSyncMode) { if (!freewheel && !GetEngineControl()->fSyncMode) {
jack_log("JackClient::SetupDriverSync driver sem in flush mode"); jack_log("JackClient::SetupDriverSync driver sem in flush mode");
fSynchroTable[AUDIO_DRIVER_REFNUM]->SetFlush(true);
fSynchroTable[FREEWHEEL_DRIVER_REFNUM]->SetFlush(true);
fSynchroTable[LOOPBACK_DRIVER_REFNUM]->SetFlush(true);
fSynchroTable[AUDIO_DRIVER_REFNUM].SetFlush(true);
fSynchroTable[FREEWHEEL_DRIVER_REFNUM].SetFlush(true);
fSynchroTable[LOOPBACK_DRIVER_REFNUM].SetFlush(true);
} else { } else {
jack_log("JackClient::SetupDriverSync driver sem in normal mode"); jack_log("JackClient::SetupDriverSync driver sem in normal mode");
fSynchroTable[AUDIO_DRIVER_REFNUM]->SetFlush(false);
fSynchroTable[FREEWHEEL_DRIVER_REFNUM]->SetFlush(false);
fSynchroTable[LOOPBACK_DRIVER_REFNUM]->SetFlush(false);
fSynchroTable[AUDIO_DRIVER_REFNUM].SetFlush(false);
fSynchroTable[FREEWHEEL_DRIVER_REFNUM].SetFlush(false);
fSynchroTable[LOOPBACK_DRIVER_REFNUM].SetFlush(false);
} }
} }


@@ -188,7 +187,7 @@ int JackClient::ClientNotify(int refnum, const char* name, int notify, int sync,
case kStartFreewheelCallback: case kStartFreewheelCallback:
jack_log("JackClient::kStartFreewheel"); jack_log("JackClient::kStartFreewheel");
SetupDriverSync(true); SetupDriverSync(true);
fThread->DropRealTime();
fThread.DropRealTime();
if (fFreewheel) if (fFreewheel)
fFreewheel(1, fFreewheelArg); fFreewheel(1, fFreewheelArg);
break; break;
@@ -198,7 +197,7 @@ int JackClient::ClientNotify(int refnum, const char* name, int notify, int sync,
SetupDriverSync(false); SetupDriverSync(false);
if (fFreewheel) if (fFreewheel)
fFreewheel(0, fFreewheelArg); fFreewheel(0, fFreewheelArg);
fThread->AcquireRealTime();
fThread.AcquireRealTime();
break; break;


case kPortRegistrationOnCallback: case kPortRegistrationOnCallback:
@@ -290,7 +289,7 @@ int JackClient::Deactivate()
// RT thread is stopped only when needed... // RT thread is stopped only when needed...
if (IsRealTime()) if (IsRealTime())
fThread->Kill();
fThread.Kill();
return result; return result;
} }


@@ -318,15 +317,15 @@ int JackClient::StartThread()
long(int64_t(GetEngineControl()->fConstraint) / 1000.0f)); long(int64_t(GetEngineControl()->fConstraint) / 1000.0f));


// Will do "something" on OSX only... // Will do "something" on OSX only...
fThread->SetParams(GetEngineControl()->fPeriod, GetEngineControl()->fComputation, GetEngineControl()->fConstraint);
fThread.SetParams(GetEngineControl()->fPeriod, GetEngineControl()->fComputation, GetEngineControl()->fConstraint);


if (fThread->Start() < 0) {
if (fThread.Start() < 0) {
jack_error("Start thread error"); jack_error("Start thread error");
return -1; return -1;
} }


if (GetEngineControl()->fRealTime) { if (GetEngineControl()->fRealTime) {
if (fThread->AcquireRealTime(GetEngineControl()->fPriority - 1) < 0) {
if (fThread.AcquireRealTime(GetEngineControl()->fPriority - 1) < 0) {
jack_error("AcquireRealTime error"); jack_error("AcquireRealTime error");
} }
} }
@@ -445,7 +444,7 @@ inline int 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...
int result; int result;
fThread->DropRealTime();
fThread.DropRealTime();
GetClientControl()->fActive = false; GetClientControl()->fActive = false;
fChannel->ClientDeactivate(GetClientControl()->fRefNum, &result); fChannel->ClientDeactivate(GetClientControl()->fRefNum, &result);
return 0; return 0;
@@ -456,7 +455,7 @@ inline int 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...
int result; int result;
fThread->DropRealTime();
fThread.DropRealTime();
GetClientControl()->fActive = false; GetClientControl()->fActive = false;
fChannel->ClientDeactivate(GetClientControl()->fRefNum, &result); fChannel->ClientDeactivate(GetClientControl()->fRefNum, &result);
ShutDown(); ShutDown();


+ 9
- 8
common/JackClient.h View File

@@ -30,17 +30,18 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "varargs.h" #include "varargs.h"
#include <list> #include <list>


#include "JackPlatformSynchro.h"
#include "JackPlatformThread.h"
#include "JackChannel.h"

namespace Jack namespace Jack
{ {


class JackClientChannelInterface;
class JackGraphManager; class JackGraphManager;
class JackServer; class JackServer;
class JackEngine; class JackEngine;
class JackSynchro;
struct JackClientControl; struct JackClientControl;
struct JackEngineControl; struct JackEngineControl;
class JackSyncInterface;


typedef void (*JackShutdownCallback)(void *arg); typedef void (*JackShutdownCallback)(void *arg);


@@ -83,9 +84,9 @@ class JackClient : public JackClientInterface, public JackRunnableInterface
void* fThreadFunArg; void* fThreadFunArg;
char fServerName[64]; char fServerName[64];


JackThread* fThread; /*! Thread to execute the Process function */
JackClientChannelInterface* fChannel;
JackSynchro** fSynchroTable;
JackThread fThread; /*! Thread to execute the Process function */
detail::JackClientChannelInterface* fChannel;
JackSynchro* fSynchroTable;
std::list<jack_port_id_t> fPortList; std::list<jack_port_id_t> fPortList;


int StartThread(); int StartThread();
@@ -110,7 +111,7 @@ class JackClient : public JackClientInterface, public JackRunnableInterface
public: public:


JackClient(); JackClient();
JackClient(JackSynchro** table);
JackClient(JackSynchro* table);
virtual ~JackClient(); virtual ~JackClient();


virtual int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) = 0; virtual int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) = 0;
@@ -186,7 +187,7 @@ class JackClient : public JackClientInterface, public JackRunnableInterface
// Each "side" server and client will implement this to get the shared graph manager, engine control and inter-process synchro table. // Each "side" server and client will implement this to get the shared graph manager, engine control and inter-process synchro table.
extern JackGraphManager* GetGraphManager(); extern JackGraphManager* GetGraphManager();
extern JackEngineControl* GetEngineControl(); extern JackEngineControl* GetEngineControl();
extern JackSynchro** GetSynchroTable();
extern JackSynchro* GetSynchroTable();


} // end of namespace } // end of namespace




+ 4
- 4
common/JackConnectionManager.cpp View File

@@ -256,10 +256,10 @@ void JackConnectionManager::ResetGraph(JackClientTiming* timing)
/*! /*!
\brief Wait on the input synchro. \brief Wait on the input synchro.
*/ */
int JackConnectionManager::SuspendRefNum(JackClientControl* control, JackSynchro** table, JackClientTiming* timing, long time_out_usec)
int JackConnectionManager::SuspendRefNum(JackClientControl* control, JackSynchro* table, JackClientTiming* timing, long time_out_usec)
{ {
bool res; bool res;
if ((res = table[control->fRefNum]->TimedWait(time_out_usec))) {
if ((res = table[control->fRefNum].TimedWait(time_out_usec))) {
timing[control->fRefNum].fStatus = Running; timing[control->fRefNum].fStatus = Running;
timing[control->fRefNum].fAwakeAt = GetMicroSeconds(); timing[control->fRefNum].fAwakeAt = GetMicroSeconds();
} }
@@ -269,7 +269,7 @@ int JackConnectionManager::SuspendRefNum(JackClientControl* control, JackSynchro
/*! /*!
\brief Signal clients connected to the given client. \brief Signal clients connected to the given client.
*/ */
int JackConnectionManager::ResumeRefNum(JackClientControl* control, JackSynchro** table, JackClientTiming* timing)
int JackConnectionManager::ResumeRefNum(JackClientControl* control, JackSynchro* table, JackClientTiming* timing)
{ {
jack_time_t current_date = GetMicroSeconds(); jack_time_t current_date = GetMicroSeconds();
const jack_int_t* outputRef = fConnectionRef.GetItems(control->fRefNum); const jack_int_t* outputRef = fConnectionRef.GetItems(control->fRefNum);
@@ -288,7 +288,7 @@ int JackConnectionManager::ResumeRefNum(JackClientControl* control, JackSynchro*
timing[i].fStatus = Triggered; timing[i].fStatus = Triggered;
timing[i].fSignaledAt = current_date; timing[i].fSignaledAt = current_date;


if (!fInputCounter[i].Signal(table[i], control)) {
if (!fInputCounter[i].Signal(table + i, control)) {
jack_log("JackConnectionManager::ResumeRefNum error: ref = %ld output = %ld ", control->fRefNum, i); jack_log("JackConnectionManager::ResumeRefNum error: ref = %ld output = %ld ", control->fRefNum, i);
res = -1; res = -1;
} }


+ 2
- 2
common/JackConnectionManager.h View File

@@ -442,8 +442,8 @@ class JackConnectionManager


// Graph // Graph
void ResetGraph(JackClientTiming* timing); void ResetGraph(JackClientTiming* timing);
int ResumeRefNum(JackClientControl* control, JackSynchro** table, JackClientTiming* timing);
int SuspendRefNum(JackClientControl* control, JackSynchro** table, JackClientTiming* timing, long time_out_usec);
int ResumeRefNum(JackClientControl* control, JackSynchro* table, JackClientTiming* timing);
int SuspendRefNum(JackClientControl* control, JackSynchro* table, JackClientTiming* timing, long time_out_usec);
}; };


} // end of namespace } // end of namespace


+ 3
- 3
common/JackDriver.cpp View File

@@ -43,7 +43,7 @@ using namespace std;
namespace Jack namespace Jack
{ {


JackDriver::JackDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table)
JackDriver::JackDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro* table)
{ {
assert(strlen(name) < JACK_CLIENT_NAME_SIZE); assert(strlen(name) < JACK_CLIENT_NAME_SIZE);
fSynchroTable = table; fSynchroTable = table;
@@ -149,10 +149,10 @@ void JackDriver::SetupDriverSync(int ref, bool freewheel)
{ {
if (!freewheel && !fEngineControl->fSyncMode) { if (!freewheel && !fEngineControl->fSyncMode) {
jack_log("JackDriver::SetupDriverSync driver sem in flush mode"); jack_log("JackDriver::SetupDriverSync driver sem in flush mode");
fSynchroTable[ref]->SetFlush(true);
fSynchroTable[ref].SetFlush(true);
} else { } else {
jack_log("JackDriver::SetupDriverSync driver sem in normal mode"); jack_log("JackDriver::SetupDriverSync driver sem in normal mode");
fSynchroTable[ref]->SetFlush(false);
fSynchroTable[ref].SetFlush(false);
} }
} }




+ 3
- 3
common/JackDriver.h View File

@@ -24,6 +24,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "types.h" #include "types.h"
#include "JackClientInterface.h" #include "JackClientInterface.h"
#include "JackConstants.h" #include "JackConstants.h"
#include "JackPlatformSynchro.h"
#include <list> #include <list>


namespace Jack namespace Jack
@@ -31,7 +32,6 @@ namespace Jack


class JackEngineInterface; class JackEngineInterface;
class JackGraphManager; class JackGraphManager;
class JackSynchro;
struct JackEngineControl; struct JackEngineControl;
struct JackClientControl; struct JackClientControl;


@@ -152,7 +152,7 @@ class EXPORT JackDriver : public JackDriverClient
float fDelayedUsecs; float fDelayedUsecs;
JackEngineInterface* fEngine; JackEngineInterface* fEngine;
JackGraphManager* fGraphManager; JackGraphManager* fGraphManager;
JackSynchro** fSynchroTable;
JackSynchro* fSynchroTable;
JackEngineControl* fEngineControl; JackEngineControl* fEngineControl;
JackClientControl* fClientControl; JackClientControl* fClientControl;


@@ -163,7 +163,7 @@ class EXPORT JackDriver : public JackDriverClient


public: public:


JackDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table);
JackDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro* table);
JackDriver(); JackDriver();
virtual ~JackDriver(); virtual ~JackDriver();




+ 2
- 2
common/JackDriverLoader.h View File

@@ -45,11 +45,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#endif #endif


typedef jack_driver_desc_t * (*JackDriverDescFunction) (); typedef jack_driver_desc_t * (*JackDriverDescFunction) ();
typedef Jack::JackDriverClientInterface* (*initialize) (Jack::JackEngineInterface*, Jack::JackSynchro**, const JSList *);
typedef Jack::JackDriverClientInterface* (*initialize) (Jack::JackEngineInterface*, Jack::JackSynchro*, const JSList *);


typedef struct _jack_driver_info typedef struct _jack_driver_info
{ {
Jack::JackDriverClientInterface* (*initialize)(Jack::JackEngineInterface*, Jack::JackSynchro**, const JSList *);
Jack::JackDriverClientInterface* (*initialize)(Jack::JackEngineInterface*, Jack::JackSynchro*, const JSList *);
DRIVER_HANDLE handle; DRIVER_HANDLE handle;
} }
jack_driver_info_t; jack_driver_info_t;


+ 1
- 1
common/JackDummyDriver.cpp View File

@@ -138,7 +138,7 @@ extern "C"
return desc; return desc;
} }


Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro** table, const JSList* params) {
Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro* table, const JSList* params) {
jack_nframes_t sample_rate = 48000; jack_nframes_t sample_rate = 48000;
jack_nframes_t period_size = 1024; jack_nframes_t period_size = 1024;
unsigned int capture_ports = 2; unsigned int capture_ports = 2;


+ 1
- 1
common/JackDummyDriver.h View File

@@ -38,7 +38,7 @@ class JackDummyDriver : public JackAudioDriver


public: public:


JackDummyDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table, unsigned long wait_time)
JackDummyDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro* table, unsigned long wait_time)
: JackAudioDriver(name, alias, engine, table), fWaitTime(wait_time) : JackAudioDriver(name, alias, engine, table), fWaitTime(wait_time)
{} {}
virtual ~JackDummyDriver() virtual ~JackDummyDriver()


+ 19
- 24
common/JackEngine.cpp View File

@@ -37,21 +37,18 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackClientControl.h" #include "JackClientControl.h"
#include "JackGlobals.h" #include "JackGlobals.h"
#include "JackChannel.h" #include "JackChannel.h"
#include "JackSyncInterface.h"
#include "JackError.h" #include "JackError.h"


namespace Jack namespace Jack
{ {


JackEngine::JackEngine(JackGraphManager* manager, JackEngine::JackEngine(JackGraphManager* manager,
JackSynchro** table,
JackSynchro* table,
JackEngineControl* control) JackEngineControl* control)
{ {
fGraphManager = manager; fGraphManager = manager;
fSynchroTable = table; fSynchroTable = table;
fEngineControl = control; fEngineControl = control;
fChannel = JackGlobals::MakeServerNotifyChannel();
fSignal = JackGlobals::MakeInterProcessSync();
for (int i = 0; i < CLIENT_NUM; i++) for (int i = 0; i < CLIENT_NUM; i++)
fClientTable[i] = NULL; fClientTable[i] = NULL;
} }
@@ -59,8 +56,6 @@ JackEngine::JackEngine(JackGraphManager* manager,
JackEngine::~JackEngine() JackEngine::~JackEngine()
{ {
jack_log("JackEngine::~JackEngine"); jack_log("JackEngine::~JackEngine");
delete fChannel;
delete fSignal;
} }


int JackEngine::Open() int JackEngine::Open()
@@ -68,7 +63,7 @@ int JackEngine::Open()
jack_log("JackEngine::Open"); jack_log("JackEngine::Open");


// Open audio thread => request thread communication channel // Open audio thread => request thread communication channel
if (fChannel->Open(fEngineControl->fServerName) < 0) {
if (fChannel.Open(fEngineControl->fServerName) < 0) {
jack_error("Cannot connect to server"); jack_error("Cannot connect to server");
return -1; return -1;
} else { } else {
@@ -79,7 +74,7 @@ int JackEngine::Open()
int JackEngine::Close() int JackEngine::Close()
{ {
jack_log("JackEngine::Close"); jack_log("JackEngine::Close");
fChannel->Close();
fChannel.Close();
// Close (possibly) remaining clients (RT is stopped) // Close (possibly) remaining clients (RT is stopped)
for (int i = 0; i < CLIENT_NUM; i++) { for (int i = 0; i < CLIENT_NUM; i++) {
@@ -94,7 +89,7 @@ int JackEngine::Close()
} }
} }
fSignal->Destroy();
fSignal.Destroy();
return 0; return 0;
} }
@@ -142,8 +137,8 @@ void JackEngine::ProcessNext(jack_time_t callback_usecs)
{ {
fLastSwitchUsecs = callback_usecs; fLastSwitchUsecs = callback_usecs;
if (fGraphManager->RunNextGraph()) // True if the graph actually switched to a new state if (fGraphManager->RunNextGraph()) // True if the graph actually switched to a new state
fChannel->Notify(ALL_CLIENTS, kGraphOrderCallback, 0);
fSignal->SignalAll(); // Signal for threads waiting for next cycle
fChannel.Notify(ALL_CLIENTS, kGraphOrderCallback, 0);
fSignal.SignalAll(); // Signal for threads waiting for next cycle
} }


void JackEngine::ProcessCurrent(jack_time_t callback_usecs) void JackEngine::ProcessCurrent(jack_time_t callback_usecs)
@@ -199,12 +194,12 @@ void JackEngine::CheckXRun(jack_time_t callback_usecs) // REVOIR les conditions


if (status != NotTriggered && status != Finished) { if (status != NotTriggered && status != Finished) {
jack_error("JackEngine::XRun: client = %s was not run: state = %ld", client->GetClientControl()->fName, status); jack_error("JackEngine::XRun: client = %s was not run: state = %ld", client->GetClientControl()->fName, status);
fChannel->Notify(ALL_CLIENTS, kXRunCallback, 0); // Notify all clients
fChannel.Notify(ALL_CLIENTS, kXRunCallback, 0); // Notify all clients
} }


if (status == Finished && (long)(finished_date - callback_usecs) > 0) { if (status == Finished && (long)(finished_date - callback_usecs) > 0) {
jack_error("JackEngine::XRun: client %s finished after current callback", client->GetClientControl()->fName); jack_error("JackEngine::XRun: client %s finished after current callback", client->GetClientControl()->fName);
fChannel->Notify(ALL_CLIENTS, kXRunCallback, 0); // Notify all clients
fChannel.Notify(ALL_CLIENTS, kXRunCallback, 0); // Notify all clients
} }
} }
} }
@@ -281,7 +276,7 @@ void JackEngine::NotifyXRun(jack_time_t callback_usecs, float delayed_usecs)
// Use the audio thread => request thread communication channel // Use the audio thread => request thread communication channel
fEngineControl->ResetFrameTime(callback_usecs); fEngineControl->ResetFrameTime(callback_usecs);
fEngineControl->NotifyXRun(delayed_usecs); fEngineControl->NotifyXRun(delayed_usecs);
fChannel->Notify(ALL_CLIENTS, kXRunCallback, 0);
fChannel.Notify(ALL_CLIENTS, kXRunCallback, 0);
} }


void JackEngine::NotifyXRun(int refnum) void JackEngine::NotifyXRun(int refnum)
@@ -478,7 +473,7 @@ int JackEngine::ClientExternalOpen(const char* name, int pid, int* ref, int* sha


JackExternalClient* client = new JackExternalClient(); JackExternalClient* client = new JackExternalClient();


if (!fSynchroTable[refnum]->Allocate(name, fEngineControl->fServerName, 0)) {
if (!fSynchroTable[refnum].Allocate(name, fEngineControl->fServerName, 0)) {
jack_error("Cannot allocate synchro"); jack_error("Cannot allocate synchro");
goto error; goto error;
} }
@@ -488,7 +483,7 @@ int JackEngine::ClientExternalOpen(const char* name, int pid, int* ref, int* sha
goto error; goto error;
} }


if (!fSignal->TimedWait(DRIVER_OPEN_TIMEOUT * 1000000)) {
if (!fSignal.TimedWait(DRIVER_OPEN_TIMEOUT * 1000000)) {
// Failure if RT thread is not running (problem with the driver...) // Failure if RT thread is not running (problem with the driver...)
jack_error("Driver is not running"); jack_error("Driver is not running");
goto error; goto error;
@@ -510,7 +505,7 @@ int JackEngine::ClientExternalOpen(const char* name, int pid, int* ref, int* sha


error: error:
// Cleanup... // Cleanup...
fSynchroTable[refnum]->Destroy();
fSynchroTable[refnum].Destroy();
fClientTable[refnum] = 0; fClientTable[refnum] = 0;
client->Close(); client->Close();
delete client; delete client;
@@ -528,12 +523,12 @@ int JackEngine::ClientInternalOpen(const char* name, int* ref, JackEngineControl
goto error; goto error;
} }


if (!fSynchroTable[refnum]->Allocate(name, fEngineControl->fServerName, 0)) {
if (!fSynchroTable[refnum].Allocate(name, fEngineControl->fServerName, 0)) {
jack_error("Cannot allocate synchro"); jack_error("Cannot allocate synchro");
goto error; goto error;
} }


if (wait && !fSignal->TimedWait(DRIVER_OPEN_TIMEOUT * 1000000)) {
if (wait && !fSignal.TimedWait(DRIVER_OPEN_TIMEOUT * 1000000)) {
// Failure if RT thread is not running (problem with the driver...) // Failure if RT thread is not running (problem with the driver...)
jack_error("Driver is not running"); jack_error("Driver is not running");
goto error; goto error;
@@ -555,7 +550,7 @@ int JackEngine::ClientInternalOpen(const char* name, int* ref, JackEngineControl


error: error:
// Cleanup... // Cleanup...
fSynchroTable[refnum]->Destroy();
fSynchroTable[refnum].Destroy();
fClientTable[refnum] = 0; fClientTable[refnum] = 0;
return -1; return -1;
} }
@@ -608,7 +603,7 @@ int JackEngine::ClientCloseAux(int refnum, JackClientInterface* client, bool wai


// Wait until next cycle to be sure client is not used anymore // Wait until next cycle to be sure client is not used anymore
if (wait) { if (wait) {
if (!fSignal->TimedWait(fEngineControl->fTimeOutUsecs * 2)) { // Must wait at least until a switch occurs in Process, even in case of graph end failure
if (!fSignal.TimedWait(fEngineControl->fTimeOutUsecs * 2)) { // Must wait at least until a switch occurs in Process, even in case of graph end failure
jack_error("JackEngine::ClientCloseAux wait error ref = %ld", refnum); jack_error("JackEngine::ClientCloseAux wait error ref = %ld", refnum);
} }
} }
@@ -617,7 +612,7 @@ int JackEngine::ClientCloseAux(int refnum, JackClientInterface* client, bool wai
NotifyRemoveClient(client->GetClientControl()->fName, client->GetClientControl()->fRefNum); NotifyRemoveClient(client->GetClientControl()->fName, client->GetClientControl()->fRefNum);


// Cleanup... // Cleanup...
fSynchroTable[refnum]->Destroy();
fSynchroTable[refnum].Destroy();
fEngineControl->ResetRollingUsecs(); fEngineControl->ResetRollingUsecs();
return 0; return 0;
} }
@@ -632,7 +627,7 @@ int JackEngine::ClientActivate(int refnum, bool state)
fGraphManager->Activate(refnum); fGraphManager->Activate(refnum);
// Wait for graph state change to be effective // Wait for graph state change to be effective
if (!fSignal->TimedWait(fEngineControl->fTimeOutUsecs * 10)) {
if (!fSignal.TimedWait(fEngineControl->fTimeOutUsecs * 10)) {
jack_error("JackEngine::ClientActivate wait error ref = %ld name = %s", refnum, client->GetClientControl()->fName); jack_error("JackEngine::ClientActivate wait error ref = %ld name = %s", refnum, client->GetClientControl()->fName);
return -1; return -1;
} else { } else {
@@ -668,7 +663,7 @@ int JackEngine::ClientDeactivate(int refnum)
fLastSwitchUsecs = 0; // Force switch to occur next cycle, even when called with "dead" clients fLastSwitchUsecs = 0; // Force switch to occur next cycle, even when called with "dead" clients


// Wait for graph state change to be effective // Wait for graph state change to be effective
if (!fSignal->TimedWait(fEngineControl->fTimeOutUsecs * 10)) {
if (!fSignal.TimedWait(fEngineControl->fTimeOutUsecs * 10)) {
jack_error("JackEngine::ClientDeactivate wait error ref = %ld name = %s", refnum, client->GetClientControl()->fName); jack_error("JackEngine::ClientDeactivate wait error ref = %ld name = %s", refnum, client->GetClientControl()->fName);
return -1; return -1;
} else { } else {


+ 6
- 6
common/JackEngine.h View File

@@ -24,15 +24,15 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackGraphManager.h" #include "JackGraphManager.h"
#include "JackSynchro.h" #include "JackSynchro.h"
#include "JackTransportEngine.h" #include "JackTransportEngine.h"
#include "JackPlatformProcessSync.h"
#include "JackPlatformServerNotifyChannel.h"


namespace Jack namespace Jack
{ {


class JackClientInterface; class JackClientInterface;
struct JackEngineControl; struct JackEngineControl;
class JackServerNotifyChannelInterface;
class JackExternalClient; class JackExternalClient;
class JackSyncInterface;
class JackEngineInterface class JackEngineInterface
{ {
@@ -99,9 +99,9 @@ class JackEngine
JackGraphManager* fGraphManager; JackGraphManager* fGraphManager;
JackEngineControl* fEngineControl; JackEngineControl* fEngineControl;
JackClientInterface* fClientTable[CLIENT_NUM]; JackClientInterface* fClientTable[CLIENT_NUM];
JackSynchro** fSynchroTable;
JackServerNotifyChannelInterface* fChannel; /*! To communicate between the RT thread and server */
JackSyncInterface* fSignal;
JackSynchro* fSynchroTable;
JackServerNotifyChannel fChannel; /*! To communicate between the RT thread and server */
JackProcessSync fSignal;
jack_time_t fLastSwitchUsecs; jack_time_t fLastSwitchUsecs;


int ClientCloseAux(int refnum, JackClientInterface* client, bool wait); int ClientCloseAux(int refnum, JackClientInterface* client, bool wait);
@@ -127,7 +127,7 @@ class JackEngine


public: public:


JackEngine(JackGraphManager* manager, JackSynchro** table, JackEngineControl* controler);
JackEngine(JackGraphManager* manager, JackSynchro* table, JackEngineControl* controler);
~JackEngine(); ~JackEngine();


int Open(); int Open();


+ 3
- 5
common/JackExternalClient.cpp View File

@@ -33,19 +33,17 @@ namespace Jack


JackExternalClient::JackExternalClient(): fClientControl(NULL) JackExternalClient::JackExternalClient(): fClientControl(NULL)
{ {
fChannel = JackGlobals::MakeNotifyChannel();
} }


JackExternalClient::~JackExternalClient() JackExternalClient::~JackExternalClient()
{ {
delete fChannel;
} }


int JackExternalClient::ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2) int JackExternalClient::ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2)
{ {
int result = -1; int result = -1;
jack_log("JackExternalClient::ClientNotify ref = %ld name = %s notify = %ld", refnum, name, notify); jack_log("JackExternalClient::ClientNotify ref = %ld name = %s notify = %ld", refnum, name, notify);
fChannel->ClientNotify(refnum, name, notify, sync, value1, value2, &result);
fChannel.ClientNotify(refnum, name, notify, sync, value1, value2, &result);
return result; return result;
} }


@@ -53,7 +51,7 @@ int JackExternalClient::Open(const char* name, int pid, int refnum, int* shared_
{ {
try { try {


if (fChannel->Open(name) < 0) {
if (fChannel.Open(name) < 0) {
jack_error("Cannot connect to client name = %s\n", name); jack_error("Cannot connect to client name = %s\n", name);
return -1; return -1;
} }
@@ -75,7 +73,7 @@ int JackExternalClient::Open(const char* name, int pid, int refnum, int* shared_


int JackExternalClient::Close() int JackExternalClient::Close()
{ {
fChannel->Close();
fChannel.Close();
delete fClientControl; delete fClientControl;
return 0; return 0;
} }


+ 2
- 2
common/JackExternalClient.h View File

@@ -22,11 +22,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#define __JackExternalClient__ #define __JackExternalClient__


#include "JackClientInterface.h" #include "JackClientInterface.h"
#include "JackPlatformNotifyChannel.h"


namespace Jack namespace Jack
{ {


class JackNotifyChannelInterface;
struct JackClientControl; struct JackClientControl;


/*! /*!
@@ -38,7 +38,7 @@ class JackExternalClient : public JackClientInterface


private: private:


JackNotifyChannelInterface* fChannel; /*! Server/client communication channel */
JackNotifyChannel fChannel; /*! Server/client communication channel */
JackClientControl* fClientControl; /*! Client control in shared memory */ JackClientControl* fClientControl; /*! Client control in shared memory */


public: public:


+ 2
- 4
common/JackFifo.h View File

@@ -32,7 +32,7 @@ namespace Jack
\brief Inter process synchronization using Fifo. \brief Inter process synchronization using Fifo.
*/ */


class JackFifo : public JackSynchro
class JackFifo : public detail::JackSynchro
{ {


private: private:
@@ -48,9 +48,7 @@ class JackFifo : public JackSynchro


public: public:


JackFifo(): JackSynchro(), fFifo( -1)
{}
virtual ~JackFifo()
JackFifo(): fFifo( -1)
{} {}


bool Signal(); bool Signal();


+ 1
- 1
common/JackFreewheelDriver.h View File

@@ -35,7 +35,7 @@ class JackFreewheelDriver : public JackDriver


public: public:


JackFreewheelDriver(JackEngineInterface* engine, JackSynchro** table): JackDriver("freewheel", "", engine, table)
JackFreewheelDriver(JackEngineInterface* engine, JackSynchro* table): JackDriver("freewheel", "", engine, table)
{} {}
virtual ~JackFreewheelDriver() virtual ~JackFreewheelDriver()
{} {}


+ 0
- 56
common/JackGlobals.cpp View File

@@ -24,62 +24,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackGlobals.h" #include "JackGlobals.h"
#include "JackError.h" #include "JackError.h"


namespace Jack
{

JackFactoryImpl* JackGlobals::fInstance;

void JackGlobals::InitServer()
{
jack_log("JackGlobals InitServer");
if (!fInstance) {
#ifdef __APPLE__
fInstance = new JackFactoryOSXServer();
#endif
#ifdef WIN32
fInstance = new JackFactoryWindowsServer();
#endif
#ifdef __linux__
fInstance = new JackFactoryLinuxServer();
#endif
}
}

void JackGlobals::InitClient()
{
jack_log("JackGlobals InitClient");
if (!fInstance) {
#ifdef __APPLE__
fInstance = new JackFactoryOSXClient();
#endif
#ifdef WIN32
fInstance = new JackFactoryWindowsClient();
#endif
#ifdef __linux__
fInstance = new JackFactoryLinuxClient();
#endif
}
}

void JackGlobals::Destroy()
{
jack_log("JackGlobals Destroy");
if (fInstance) {
delete fInstance;
fInstance = NULL;
}
}
} // end of namespace

static bool gKeyRealtimeInitialized = false; static bool gKeyRealtimeInitialized = false;
static bool g_key_log_function_initialized = false; static bool g_key_log_function_initialized = false;




+ 3
- 230
common/JackGlobals.h View File

@@ -21,239 +21,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#define __JackGlobals__ #define __JackGlobals__


#include "JackError.h" #include "JackError.h"
#include "JackThread.h"
#include "JackThread.h"
#include "JackExports.h" #include "JackExports.h"


namespace Jack
{

class JackSynchro;
class JackServerNotifyChannelInterface;
class JackClientChannelInterface;
class JackNotifyChannelInterface;
class JackServerChannelInterface;
class JackSyncInterface;
class JackThread;
class JackDriverClientInterface;
class JackRunnableInterface;
class JackEngine;

/*!
\brief Factory description

\todo possibly use in a dynamic way to test different communication/synchro implementations.
*/

class JackFactoryImpl
{
public:

JackFactoryImpl()
{}
virtual ~JackFactoryImpl()
{}

virtual JackSynchro* MakeSynchro() = 0;
virtual JackServerNotifyChannelInterface* MakeServerNotifyChannel() = 0;
virtual JackClientChannelInterface* MakeClientChannel() = 0;
virtual JackNotifyChannelInterface* MakeNotifyChannel() = 0;
virtual JackServerChannelInterface* MakeServerChannel() = 0;
virtual JackSyncInterface* MakeInterProcessSync() = 0;
virtual JackThread* MakeThread(JackRunnableInterface* runnable) = 0;
};

#ifdef __linux__

class JackFactoryLinuxServer : public JackFactoryImpl
{
public:

JackFactoryLinuxServer()
{}
virtual ~JackFactoryLinuxServer()
{}

JackSynchro* MakeSynchro();
JackServerNotifyChannelInterface* MakeServerNotifyChannel();
JackClientChannelInterface* MakeClientChannel();
JackNotifyChannelInterface* MakeNotifyChannel();
JackServerChannelInterface* MakeServerChannel();
JackSyncInterface* MakeInterProcessSync();
JackThread* MakeThread(JackRunnableInterface* runnable);
};

class JackFactoryLinuxClient : public JackFactoryImpl
{
public:

JackFactoryLinuxClient()
{}
virtual ~JackFactoryLinuxClient()
{}

JackSynchro* MakeSynchro();
JackServerNotifyChannelInterface* MakeServerNotifyChannel();
JackClientChannelInterface* MakeClientChannel();
JackNotifyChannelInterface* MakeNotifyChannel();
JackServerChannelInterface* MakeServerChannel();
JackSyncInterface* MakeInterProcessSync();
JackThread* MakeThread(JackRunnableInterface* runnable);
};

#endif

#ifdef WIN32

class JackFactoryWindowsServer : public JackFactoryImpl
{
public:

JackFactoryWindowsServer()
{}
virtual ~JackFactoryWindowsServer()
{}

JackSynchro* MakeSynchro();
JackServerNotifyChannelInterface* MakeServerNotifyChannel();
JackClientChannelInterface* MakeClientChannel();
JackNotifyChannelInterface* MakeNotifyChannel();
JackServerChannelInterface* MakeServerChannel();
JackSyncInterface* MakeInterProcessSync();
JackThread* MakeThread(JackRunnableInterface* runnable);
};

class JackFactoryWindowsClient : public JackFactoryImpl
{
public:

JackFactoryWindowsClient()
{}
virtual ~JackFactoryWindowsClient()
{}

JackSynchro* MakeSynchro();
JackServerNotifyChannelInterface* MakeServerNotifyChannel();
JackClientChannelInterface* MakeClientChannel();
JackNotifyChannelInterface* MakeNotifyChannel();
JackServerChannelInterface* MakeServerChannel();
JackSyncInterface* MakeInterProcessSync();
JackThread* MakeThread(JackRunnableInterface* runnable);
};

#endif

#if defined(__APPLE__)

class JackFactoryOSXServer : public JackFactoryImpl
{
public:

JackFactoryOSXServer()
{}
virtual ~JackFactoryOSXServer()
{}

JackSynchro* MakeSynchro();
JackServerNotifyChannelInterface* MakeServerNotifyChannel();
JackClientChannelInterface* MakeClientChannel();
JackNotifyChannelInterface* MakeNotifyChannel();
JackServerChannelInterface* MakeServerChannel();
JackSyncInterface* MakeInterProcessSync();
JackThread* MakeThread(JackRunnableInterface* runnable);
};

class JackFactoryOSXClient : public JackFactoryImpl
{
public:

JackFactoryOSXClient()
{}
virtual ~JackFactoryOSXClient()
{}

JackSynchro* MakeSynchro();
JackServerNotifyChannelInterface* MakeServerNotifyChannel();
JackClientChannelInterface* MakeClientChannel();
JackNotifyChannelInterface* MakeNotifyChannel();
JackServerChannelInterface* MakeServerChannel();
JackSyncInterface* MakeInterProcessSync();
JackThread* MakeThread(JackRunnableInterface* runnable);
};

#endif

/*!
\brief Factory for OS specific ressources.
*/

class JackGlobals
{
private:

static JackFactoryImpl* fInstance;

public:

JackGlobals()
{}
virtual ~JackGlobals()
{}

static JackSynchro* MakeSynchro()
{
return fInstance->MakeSynchro();
}
static JackServerNotifyChannelInterface* MakeServerNotifyChannel()
{
return fInstance->MakeServerNotifyChannel();
}
static JackClientChannelInterface* MakeClientChannel()
{
return fInstance->MakeClientChannel();
}
static JackNotifyChannelInterface* MakeNotifyChannel()
{
return fInstance->MakeNotifyChannel();
}
static JackServerChannelInterface* MakeServerChannel()
{
return fInstance->MakeServerChannel();
}
static JackSyncInterface* MakeInterProcessSync()
{
return fInstance->MakeInterProcessSync();
}
static JackThread* MakeThread(JackRunnableInterface* runnable)
{
return fInstance->MakeThread(runnable);
}

static void InitServer();
static void InitClient();
static void Destroy();
};

namespace detail
{
struct JackGlobalsServerInitializer
{
JackGlobalsServerInitializer(void)
{
JackGlobals::InitServer();
}

~JackGlobalsServerInitializer(void)
{
JackGlobals::Destroy();
}
};
}
#include "JackPlatformSynchro.h"
#include "JackPlatformProcessSync.h"
#include "JackPlatformThread.h"


} // end of namespace


#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"


+ 0
- 485
common/JackGlobalsClient.cpp View File

@@ -1,485 +0,0 @@
/*
Copyright (C) 2004-2008 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

*/

#if defined(HAVE_CONFIG_H)
#include "config.h"
#endif

#include "JackGlobals.h"

// OSX
#if defined(__APPLE__)
#include "JackCoreAudioDriver.h"
#include "JackMachServerNotifyChannel.h"
#include "JackMachNotifyChannel.h"
#include "JackMachServerChannel.h"
#include "JackMachClientChannel.h"
#include "JackMachThread.h"
#include "JackMachSemaphore.h"
#include "JackProcessSync.h"
#include "JackSocketServerNotifyChannel.h"
#include "JackSocketNotifyChannel.h"
#include "JackSocketServerChannel.h"
#include "JackSocketClientChannel.h"
#include "JackPosixThread.h"
#include "JackPosixSemaphore.h"
#include "JackFifo.h"
#endif

// WINDOWS
#ifdef WIN32
#include "JackWinProcessSync.h"
#include "JackWinNamedPipeClientChannel.h"
#include "JackWinEvent.h"
#include "JackWinSemaphore.h"
#include "JackWinThread.h"
#endif

// LINUX
#ifdef __linux__
#include "linux/alsa/JackAlsaDriver.h"
#include "JackProcessSync.h"
#include "JackSocketServerNotifyChannel.h"
#include "JackSocketNotifyChannel.h"
#include "JackSocketServerChannel.h"
#include "JackSocketClientChannel.h"
#include "JackPosixThread.h"
#include "JackPosixSemaphore.h"
#include "JackFifo.h"
#endif


using namespace std;

namespace Jack
{

#ifdef WIN32
JackSynchro* JackFactoryWindowsServer::MakeSynchro() {return NULL;}
JackServerNotifyChannelInterface* JackFactoryWindowsServer::MakeServerNotifyChannel() {return NULL;}
JackClientChannelInterface* JackFactoryWindowsServer::MakeClientChannel() {return NULL;}
JackNotifyChannelInterface* JackFactoryWindowsServer::MakeNotifyChannel() {return NULL;}
JackServerChannelInterface* JackFactoryWindowsServer::MakeServerChannel() {return NULL;}
JackSyncInterface* JackFactoryWindowsServer::MakeInterProcessSync() {return NULL;}
JackThread* JackFactoryWindowsServer::MakeThread(JackRunnableInterface* runnable) {return NULL;}

JackSynchro* JackFactoryWindowsClient::MakeSynchro()
{
return new JackWinSemaphore();
}

JackServerNotifyChannelInterface* JackFactoryWindowsClient::MakeServerNotifyChannel()
{
return NULL;
}
// Not used
JackClientChannelInterface* JackFactoryWindowsClient::MakeClientChannel()
{
return new JackWinNamedPipeClientChannel();
}

JackNotifyChannelInterface* JackFactoryWindowsClient::MakeNotifyChannel()
{
return NULL;
}
// Not used
JackServerChannelInterface* JackFactoryWindowsClient::MakeServerChannel()
{
return NULL;
}
// Not used
JackSyncInterface* JackFactoryWindowsClient::MakeInterProcessSync()
{
return new JackWinProcessSync();
}

JackThread* JackFactoryWindowsClient::MakeThread(JackRunnableInterface* runnable)
{
return new JackWinThread(runnable);
}
#endif

#ifdef __linux__

#if defined(SOCKET_RPC_POSIX_SEMA)
JackSynchro* JackFactoryLinuxClient::MakeSynchro()
{
return new JackPosixSemaphore();
}

JackServerNotifyChannelInterface* JackFactoryLinuxClient::MakeServerNotifyChannel()
{
return NULL;
}
// Not used
JackClientChannelInterface* JackFactoryLinuxClient::MakeClientChannel()
{
return new JackSocketClientChannel();
}

JackNotifyChannelInterface* JackFactoryLinuxClient::MakeNotifyChannel()
{
return NULL;
}
// Not used
JackServerChannelInterface* JackFactoryLinuxClient::MakeServerChannel()
{
return NULL;
}
// Not used
JackSyncInterface* JackFactoryLinuxClient::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryLinuxClient::MakeThread(JackRunnableInterface* runnable)
{
return new JackPosixThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined(SOCKET_RPC_FIFO_SEMA)
JackSynchro* JackFactoryLinuxServer::MakeSynchro() {return NULL;}
JackServerNotifyChannelInterface* JackFactoryLinuxServer::MakeServerNotifyChannel() {return NULL;}
JackClientChannelInterface* JackFactoryLinuxServer::MakeClientChannel() {return NULL;}
JackNotifyChannelInterface* JackFactoryLinuxServer::MakeNotifyChannel() {return NULL;}
JackServerChannelInterface* JackFactoryLinuxServer::MakeServerChannel() {return NULL;}
JackSyncInterface* JackFactoryLinuxServer::MakeInterProcessSync() {return NULL;}
JackThread* JackFactoryLinuxServer::MakeThread(JackRunnableInterface* runnable) {return NULL;}

JackSynchro* JackFactoryLinuxClient::MakeSynchro()
{
return new JackFifo();
}

JackServerNotifyChannelInterface* JackFactoryLinuxClient::MakeServerNotifyChannel()
{
return NULL;
}
// Not used
JackClientChannelInterface* JackFactoryLinuxClient::MakeClientChannel()
{
return new JackSocketClientChannel();
}

JackNotifyChannelInterface* JackFactoryLinuxClient::MakeNotifyChannel()
{
return NULL;
}
// Not used
JackServerChannelInterface* JackFactoryLinuxClient::MakeServerChannel()
{
return NULL;
}
// Not used
JackSyncInterface* JackFactoryLinuxClient::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryLinuxClient::MakeThread(JackRunnableInterface* runnable)
{
return new JackPosixThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined(SOCKET_RPC_FIFO_SEMA_DUMMY)
JackSynchro* JackFactoryLinuxClient::MakeSynchro()
{
return new JackFifo();
}

JackServerNotifyChannelInterface* JackFactoryLinuxClient::MakeServerNotifyChannel()
{
return NULL;
}
// Not used
JackClientChannelInterface* JackFactoryLinuxClient::MakeClientChannel()
{
return new JackSocketClientChannel();
}

JackNotifyChannelInterface* JackFactoryLinuxClient::MakeNotifyChannel()
{
return NULL;
}
// Not used
JackServerChannelInterface* JackFactoryLinuxClient::MakeServerChannel()
{
return NULL;
}
// Not used
JackSyncInterface* JackFactoryLinuxClient::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryLinuxClient::MakeThread(JackRunnableInterface* runnable)
{
return new JackPosixThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#endif

#if defined(__APPLE__)

#if defined(MACH_RPC_MACH_SEMA)
// Mach RPC + Mach Semaphore
JackSynchro* JackFactoryOSXServer::MakeSynchro() {return NULL;}
JackServerNotifyChannelInterface* JackFactoryOSXServer::MakeServerNotifyChannel() {return NULL;}
JackClientChannelInterface* JackFactoryOSXServer::MakeClientChannel() {return NULL;}
JackNotifyChannelInterface* JackFactoryOSXServer::MakeNotifyChannel() {return NULL;}
JackServerChannelInterface* JackFactoryOSXServer::MakeServerChannel() {return NULL;}
JackSyncInterface* JackFactoryOSXServer::MakeInterProcessSync() {return NULL;}
JackThread* JackFactoryOSXServer::MakeThread(JackRunnableInterface* runnable) {return NULL;}

JackSynchro* JackFactoryOSXClient::MakeSynchro()
{
return new JackMachSemaphore();
}

JackServerNotifyChannelInterface* JackFactoryOSXClient::MakeServerNotifyChannel()
{
return NULL;
}
// Not used
JackClientChannelInterface* JackFactoryOSXClient::MakeClientChannel()
{
return new JackMachClientChannel();
}

JackNotifyChannelInterface* JackFactoryOSXClient::MakeNotifyChannel()
{
return NULL;
}
// Not used
JackServerChannelInterface* JackFactoryOSXClient::MakeServerChannel()
{
return NULL;
} // Not used

JackSyncInterface* JackFactoryOSXClient::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryOSXClient::MakeThread(JackRunnableInterface* runnable)
{
return new JackMachThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined(SOCKET_RPC_POSIX_SEMA)
// Socket RPC + Posix Semaphore
JackSynchro* JackFactoryOSXClient::MakeSynchro()
{
return new JackPosixSemaphore();
}

JackServerNotifyChannelInterface* JackFactoryOSXClient::MakeServerNotifyChannel()
{
return NULL;
}
// Not used
JackClientChannelInterface* JackFactoryOSXClient::MakeClientChannel()
{
return new JackSocketClientChannel();
}

JackNotifyChannelInterface* JackFactoryOSXClient::MakeNotifyChannel()
{
return NULL;
}
// Not used
JackServerChannelInterface* JackFactoryOSXClient::MakeServerChannel()
{
return NULL;
}
// Not used
JackSyncInterface* JackFactoryOSXClient::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryOSXClient::MakeThread(JackRunnableInterface* runnable)
{
return new JackMachThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined(SOCKET_RPC_FIFO_SEMA)
// Socket RPC + Fifo Semaphore
JackSynchro* JackFactoryOSXClient::MakeSynchro()
{
return new JackFifo();
}

JackServerNotifyChannelInterface* JackFactoryOSXClient::MakeServerNotifyChannel()
{
return NULL;
}
// Not used
JackClientChannelInterface* JackFactoryOSXClient::MakeClientChannel()
{
return new JackSocketClientChannel();
}

JackNotifyChannelInterface* JackFactoryOSXClient::MakeNotifyChannel()
{
return NULL;
}
// Not used
JackServerChannelInterface* JackFactoryOSXClient::MakeServerChannel()
{
return NULL;
}
// Not used
JackSyncInterface* JackFactoryOSXClient::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryOSXClient::MakeThread(JackRunnableInterface* runnable)
{
return new JackMachThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}

#endif

#if defined(MACH_RPC_FIFO_SEMA)
// Mach RPC + Fifo Semaphore
JackSynchro* JackFactoryOSXClient::MakeSynchro()
{
return new JackFifo();
}

JackServerNotifyChannelInterface* JackFactoryOSXClient::MakeServerNotifyChannel()
{
return NULL;
}
// Not used
JackClientChannelInterface* JackFactoryOSXClient::MakeClientChannel()
{
return new JackMachClientChannel();
}

JackNotifyChannelInterface* JackFactoryOSXClient::MakeNotifyChannel()
{
return NULL;
}
// Not used
JackServerChannelInterface* JackFactoryOSXClient::MakeServerChannel()
{
return NULL;
}
// Not used
JackSyncInterface* JackFactoryOSXClient::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryOSXClient::MakeThread(JackRunnableInterface* runnable)
{
return new JackMachThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined(MACH_RPC_POSIX_SEMA)
// Mach RPC + Posix Semaphore
JackSynchro* JackFactoryOSXClient::MakeSynchro()
{
return new JackPosixSemaphore();
}

JackServerNotifyChannelInterface* JackFactoryOSXClient::MakeServerNotifyChannel()
{
return NULL;
}
// Not used
JackClientChannelInterface* JackFactoryOSXClient::MakeClientChannel()
{
return new JackMachClientChannel();
}

JackNotifyChannelInterface* JackFactoryOSXClient::MakeNotifyChannel()
{
return NULL;
}
// Not used
JackServerChannelInterface* JackFactoryOSXClient::MakeServerChannel()
{
return NULL;
}
// Not used
JackSyncInterface* JackFactoryOSXClient::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryOSXClient::MakeThread(JackRunnableInterface* runnable)
{
return new JackMachThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined SOCKET_RPC_MACH_SEMA
// Socket RPC + Mach Semaphore
JackSynchro* JackFactoryOSXClient::MakeSynchro()
{
return new JackMachSemaphore();
}

JackServerNotifyChannelInterface* JackFactoryOSXClient::MakeServerNotifyChannel()
{
return NULL;
}
// Not used
JackClientChannelInterface* JackFactoryOSXClient::MakeClientChannel()
{
return new JackSocketClientChannel();
}

JackNotifyChannelInterface* JackFactoryOSXClient::MakeNotifyChannel()
{
return NULL;
}
// Not used
JackServerChannelInterface* JackFactoryOSXClient::MakeServerChannel()
{
return NULL;
}
// Not used
JackSyncInterface* JackFactoryOSXClient::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryOSXClient::MakeThread(JackRunnableInterface* runnable)
{
return new JackMachThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#endif

} // end of namespace



+ 0
- 492
common/JackGlobalsServer.cpp View File

@@ -1,492 +0,0 @@
/*
Copyright (C) 2004-2008 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#if defined(HAVE_CONFIG_H)
#include "config.h"
#endif

#ifdef WIN32
#pragma warning (disable : 4786)
#endif

#include "JackGlobals.h"

// OSX
#if defined(__APPLE__)
#include "JackCoreAudioDriver.h"
#include "JackMachServerNotifyChannel.h"
#include "JackMachNotifyChannel.h"
#include "JackMachServerChannel.h"
#include "JackMachClientChannel.h"
#include "JackMachThread.h"
#include "JackMachSemaphore.h"
#include "JackProcessSync.h"

#include "JackSocketServerNotifyChannel.h"
#include "JackSocketNotifyChannel.h"
#include "JackSocketServerChannel.h"
#include "JackSocketClientChannel.h"
#include "JackPosixThread.h"
#include "JackPosixSemaphore.h"
#include "JackFifo.h"
#endif

// WINDOWS
#ifdef WIN32
#include "JackWinProcessSync.h"
#include "JackWinNamedPipeServerNotifyChannel.h"
#include "JackWinNamedPipeNotifyChannel.h"
#include "JackWinNamedPipeServerChannel.h"
#include "JackWinNamedPipeClientChannel.h"
#include "JackWinEvent.h"
#include "JackWinSemaphore.h"
#include "JackWinThread.h"
#endif

// LINUX
#ifdef __linux__
#include "linux/alsa/JackAlsaDriver.h"
#include "JackProcessSync.h"
#include "JackSocketServerNotifyChannel.h"
#include "JackSocketNotifyChannel.h"
#include "JackSocketServerChannel.h"
#include "JackSocketClientChannel.h"
#include "JackPosixThread.h"
#include "JackPosixSemaphore.h"
#include "JackFifo.h"
#endif

// COMMON
#include "JackDummyDriver.h"
#include "JackAudioDriver.h"

using namespace std;

namespace Jack
{

#ifdef WIN32
JackSynchro* JackFactoryWindowsClient::MakeSynchro() {return NULL;}
JackServerNotifyChannelInterface* JackFactoryWindowsClient::MakeServerNotifyChannel() {return NULL;}
JackClientChannelInterface* JackFactoryWindowsClient::MakeClientChannel() {return NULL;}
JackNotifyChannelInterface* JackFactoryWindowsClient::MakeNotifyChannel() {return NULL;}
JackServerChannelInterface* JackFactoryWindowsClient::MakeServerChannel() {return NULL;}
JackSyncInterface* JackFactoryWindowsClient::MakeInterProcessSync() {return NULL;}
JackThread* JackFactoryWindowsClient::MakeThread(JackRunnableInterface* runnable) {return NULL;}

JackSynchro* JackFactoryWindowsServer::MakeSynchro()
{
return new JackWinSemaphore();
}

JackServerNotifyChannelInterface* JackFactoryWindowsServer::MakeServerNotifyChannel()
{
return new JackWinNamedPipeServerNotifyChannel();
}

JackClientChannelInterface* JackFactoryWindowsServer::MakeClientChannel()
{
return NULL;
} // Not used

JackNotifyChannelInterface* JackFactoryWindowsServer::MakeNotifyChannel()
{
return new JackWinNamedPipeNotifyChannel();
}

JackServerChannelInterface* JackFactoryWindowsServer::MakeServerChannel()
{
return new JackWinNamedPipeServerChannel();
}

JackSyncInterface* JackFactoryWindowsServer::MakeInterProcessSync()
{
return new JackWinProcessSync();
}

JackThread* JackFactoryWindowsServer::MakeThread(JackRunnableInterface* runnable)
{
return new JackWinThread(runnable);
}
#endif

#ifdef __linux__

#if defined(SOCKET_RPC_POSIX_SEMA)
JackSynchro* JackFactoryLinuxServer::MakeSynchro()
{
return new JackPosixSemaphore();
}

JackServerNotifyChannelInterface* JackFactoryLinuxServer::MakeServerNotifyChannel()
{
return new JackSocketServerNotifyChannel();
}

JackClientChannelInterface* JackFactoryLinuxServer::MakeClientChannel()
{
return NULL;
} // Not used

JackNotifyChannelInterface* JackFactoryLinuxServer::MakeNotifyChannel()
{
return new JackSocketNotifyChannel();
}

JackServerChannelInterface* JackFactoryLinuxServer::MakeServerChannel()
{
return new JackSocketServerChannel();
}

JackSyncInterface* JackFactoryLinuxServer::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryLinuxServer::MakeThread(JackRunnableInterface* runnable)
{
return new JackPosixThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined(SOCKET_RPC_FIFO_SEMA)
JackSynchro* JackFactoryLinuxClient::MakeSynchro() {return NULL;}
JackServerNotifyChannelInterface* JackFactoryLinuxClient::MakeServerNotifyChannel() {return NULL;}
JackClientChannelInterface* JackFactoryLinuxClient::MakeClientChannel() {return NULL;}
JackNotifyChannelInterface* JackFactoryLinuxClient::MakeNotifyChannel() {return NULL;}
JackServerChannelInterface* JackFactoryLinuxClient::MakeServerChannel() {return NULL;}
JackSyncInterface* JackFactoryLinuxClient::MakeInterProcessSync() {return NULL;}
JackThread* JackFactoryLinuxClient::MakeThread(JackRunnableInterface* runnable) {return NULL;}

JackSynchro* JackFactoryLinuxServer::MakeSynchro()
{
return new JackFifo();
}

JackServerNotifyChannelInterface* JackFactoryLinuxServer::MakeServerNotifyChannel()
{
return new JackSocketServerNotifyChannel();
}

JackClientChannelInterface* JackFactoryLinuxServer::MakeClientChannel()
{
return NULL;
} // Not used

JackNotifyChannelInterface* JackFactoryLinuxServer::MakeNotifyChannel()
{
return new JackSocketNotifyChannel();
}

JackServerChannelInterface* JackFactoryLinuxServer::MakeServerChannel()
{
return new JackSocketServerChannel();
}

JackSyncInterface* JackFactoryLinuxServer::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryLinuxServer::MakeThread(JackRunnableInterface* runnable)
{
return new JackPosixThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined(SOCKET_RPC_FIFO_SEMA_DUMMY)
JackSynchro* JackFactoryLinuxServer::MakeSynchro()
{
return new JackFifo();
}

JackServerNotifyChannelInterface* JackFactoryLinuxServer::MakeServerNotifyChannel()
{
return new JackSocketServerNotifyChannel();
}

JackClientChannelInterface* JackFactoryLinuxServer::MakeClientChannel()
{
return NULL;
} // Not used

JackNotifyChannelInterface* JackFactoryLinuxServer::MakeNotifyChannel()
{
return new JackSocketNotifyChannel();
}

JackServerChannelInterface* JackFactoryLinuxServer::MakeServerChannel()
{
return new JackSocketServerChannel();
}

JackSyncInterface* JackFactoryLinuxServer::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryLinuxServer::MakeThread(JackRunnableInterface* runnable)
{
return new JackPosixThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#endif

#if defined(__APPLE__)

#if defined(MACH_RPC_MACH_SEMA)
// Mach RPC + Mach Semaphore
JackSynchro* JackFactoryOSXClient::MakeSynchro() {return NULL;}
JackServerNotifyChannelInterface* JackFactoryOSXClient::MakeServerNotifyChannel() {return NULL;}
JackClientChannelInterface* JackFactoryOSXClient::MakeClientChannel() {return NULL;}
JackNotifyChannelInterface* JackFactoryOSXClient::MakeNotifyChannel() {return NULL;}
JackServerChannelInterface* JackFactoryOSXClient::MakeServerChannel() {return NULL;}
JackSyncInterface* JackFactoryOSXClient::MakeInterProcessSync() {return NULL;}
JackThread* JackFactoryOSXClient::MakeThread(JackRunnableInterface* runnable) {return NULL;}

JackSynchro* JackFactoryOSXServer::MakeSynchro()
{
return new JackMachSemaphore();
}

JackServerNotifyChannelInterface* JackFactoryOSXServer::MakeServerNotifyChannel()
{
return new JackMachServerNotifyChannel();
}

JackClientChannelInterface* JackFactoryOSXServer::MakeClientChannel()
{
return NULL;
} // Not used

JackNotifyChannelInterface* JackFactoryOSXServer::MakeNotifyChannel()
{
return new JackMachNotifyChannel();
}

JackServerChannelInterface* JackFactoryOSXServer::MakeServerChannel()
{
return new JackMachServerChannel();
}

JackSyncInterface* JackFactoryOSXServer::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryOSXServer::MakeThread(JackRunnableInterface* runnable)
{
return new JackMachThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined(SOCKET_RPC_POSIX_SEMA)
// Socket RPC + Posix Semaphore
JackSynchro* JackFactoryOSXServer::MakeSynchro()
{
return new JackPosixSemaphore();
}

JackServerNotifyChannelInterface* JackFactoryOSXServer::MakeServerNotifyChannel()
{
return new JackSocketServerNotifyChannel();
}

JackClientChannelInterface* JackFactoryOSXServer::MakeClientChannel()
{
return NULL;
} // Not used

JackNotifyChannelInterface* JackFactoryOSXServer::MakeNotifyChannel()
{
return new JackSocketNotifyChannel();
}

JackServerChannelInterface* JackFactoryOSXServer::MakeServerChannel()
{
return new JackSocketServerChannel();
}

JackSyncInterface* JackFactoryOSXServer::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryOSXServer::MakeThread(JackRunnableInterface* runnable)
{
return new JackMachThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined(SOCKET_RPC_FIFO_SEMA)
// Socket RPC + Fifo Semaphore
JackSynchro* JackFactoryOSXServer::MakeSynchro()
{
return new JackFifo();
}

JackServerNotifyChannelInterface* JackFactoryOSXServer::MakeServerNotifyChannel()
{
return new JackSocketServerNotifyChannel();
}

JackClientChannelInterface* JackFactoryOSXServer::MakeClientChannel()
{
return NULL;
} // Not used

JackNotifyChannelInterface* JackFactoryOSXServer::MakeNotifyChannel()
{
return new JackSocketNotifyChannel();
}

JackServerChannelInterface* JackFactoryOSXServer::MakeServerChannel()
{
return new JackSocketServerChannel();
}

JackSyncInterface* JackFactoryOSXServer::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryOSXServer::MakeThread(JackRunnableInterface* runnable)
{
return new JackMachThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined(MACH_RPC_FIFO_SEMA)
// Mach RPC + Fifo Semaphore
JackSynchro* JackFactoryOSXServer::MakeSynchro()
{
return new JackFifo();
}

JackServerNotifyChannelInterface* JackFactoryOSXServer::MakeServerNotifyChannel()
{
return new JackMachServerNotifyChannel();
}

JackClientChannelInterface* JackFactoryOSXServer::MakeClientChannel()
{
return NULL;
} // Not used

JackNotifyChannelInterface* JackFactoryOSXServer::MakeNotifyChannel()
{
return new JackMachNotifyChannel();
}

JackServerChannelInterface* JackFactoryOSXServer::MakeServerChannel()
{
return new JackMachServerChannel();
}

JackSyncInterface* JackFactoryOSXServer::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryOSXServer::MakeThread(JackRunnableInterface* runnable)
{
return new JackMachThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined(MACH_RPC_POSIX_SEMA)
// Mach RPC + Posix Semaphore
JackSynchro* JackFactoryOSXServer::MakeSynchro()
{
return new JackPosixSemaphore();
}

JackServerNotifyChannelInterface* JackFactoryOSXServer::MakeServerNotifyChannel()
{
return new JackMachServerNotifyChannel();
}

JackClientChannelInterface* JackFactoryOSXServer::MakeClientChannel()
{
return NULL;
} // Not used

JackNotifyChannelInterface* JackFactoryOSXServer::MakeNotifyChannel()
{
return new JackMachNotifyChannel();
}

JackServerChannelInterface* JackFactoryOSXServer::MakeServerChannel()
{
return new JackMachServerChannel();
}

JackSyncInterface* JackFactoryOSXServer::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryOSXServer::MakeThread(JackRunnableInterface* runnable)
{
return new JackMachThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#if defined(SOCKET_RPC_MACH_SEMA)
// Socket RPC + Mac Semaphore
JackSynchro* JackFactoryOSXServer::MakeSynchro()
{
return new JackMachSemaphore();
}

JackServerNotifyChannelInterface* JackFactoryOSXServer::MakeServerNotifyChannel()
{
return new JackSocketServerNotifyChannel();
}

JackClientChannelInterface* JackFactoryOSXServer::MakeClientChannel()
{
return NULL;
} // Not used

JackNotifyChannelInterface* JackFactoryOSXServer::MakeNotifyChannel()
{
return new JackSocketNotifyChannel();
}

JackServerChannelInterface* JackFactoryOSXServer::MakeServerChannel()
{
return new JackSocketServerChannel();
}

JackSyncInterface* JackFactoryOSXServer::MakeInterProcessSync()
{
return new JackProcessSync();
}

JackThread* JackFactoryOSXServer::MakeThread(JackRunnableInterface* runnable)
{
return new JackMachThread(runnable, PTHREAD_CANCEL_ASYNCHRONOUS);
}
#endif

#endif

} // end of namespace

+ 2
- 2
common/JackGraphManager.cpp View File

@@ -104,14 +104,14 @@ bool JackGraphManager::IsFinishedGraph()
} }


// RT // RT
int JackGraphManager::ResumeRefNum(JackClientControl* control, JackSynchro** table)
int JackGraphManager::ResumeRefNum(JackClientControl* control, JackSynchro* table)
{ {
JackConnectionManager* manager = ReadCurrentState(); JackConnectionManager* manager = ReadCurrentState();
return manager->ResumeRefNum(control, table, fClientTiming); return manager->ResumeRefNum(control, table, fClientTiming);
} }


// RT // RT
int JackGraphManager::SuspendRefNum(JackClientControl* control, JackSynchro** table, long usec)
int JackGraphManager::SuspendRefNum(JackClientControl* control, JackSynchro* table, long usec)
{ {
JackConnectionManager* manager = ReadCurrentState(); JackConnectionManager* manager = ReadCurrentState();
return manager->SuspendRefNum(control, table, fClientTiming, usec); return manager->SuspendRefNum(control, table, fClientTiming, usec);


+ 3
- 2
common/JackGraphManager.h View File

@@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "JackConstants.h" #include "JackConstants.h"
#include "JackConnectionManager.h" #include "JackConnectionManager.h"
#include "JackAtomicState.h" #include "JackAtomicState.h"
#include "JackPlatformSynchro.h"


namespace Jack namespace Jack
{ {
@@ -108,8 +109,8 @@ class JackGraphManager : public JackShmMem, public JackAtomicState<JackConnectio
bool IsFinishedGraph(); bool IsFinishedGraph();


void InitRefNum(int refnum); void InitRefNum(int refnum);
int ResumeRefNum(JackClientControl* control, JackSynchro** table);
int SuspendRefNum(JackClientControl* control, JackSynchro** table, long usecs);
int ResumeRefNum(JackClientControl* control, JackSynchro* table);
int SuspendRefNum(JackClientControl* control, JackSynchro* table, long usecs);


JackClientTiming* GetClientTiming(int refnum); JackClientTiming* GetClientTiming(int refnum);




+ 3
- 3
common/JackInternalClient.cpp View File

@@ -59,12 +59,12 @@ JackEngineControl* GetEngineControl()
return JackServer::fInstance->GetEngineControl(); return JackServer::fInstance->GetEngineControl();
} }


JackSynchro** GetSynchroTable()
JackSynchro* GetSynchroTable()
{ {
return JackServer::fInstance->GetSynchroTable(); return JackServer::fInstance->GetSynchroTable();
} }


JackInternalClient::JackInternalClient(JackServer* server, JackSynchro** table): JackClient(table)
JackInternalClient::JackInternalClient(JackServer* server, JackSynchro* table): JackClient(table)
{ {
fClientControl = new JackClientControl(); fClientControl = new JackClientControl();
fChannel = new JackInternalClientChannel(server); fChannel = new JackInternalClientChannel(server);
@@ -129,7 +129,7 @@ JackClientControl* JackInternalClient::GetClientControl() const
return fClientControl; return fClientControl;
} }


JackLoadableInternalClient::JackLoadableInternalClient(JackServer* server, JackSynchro** table, const char* so_name, const char* object_data)
JackLoadableInternalClient::JackLoadableInternalClient(JackServer* server, JackSynchro* table, const char* so_name, const char* object_data)
: JackInternalClient(server, table) : JackInternalClient(server, table)
{ {
char path_to_so[PATH_MAX + 1]; char path_to_so[PATH_MAX + 1];


+ 2
- 3
common/JackInternalClient.h View File

@@ -27,7 +27,6 @@ namespace Jack
{ {


struct JackEngineControl; struct JackEngineControl;
class JackClientChannelInterface;


/*! /*!
\brief Internal clients in the server. \brief Internal clients in the server.
@@ -42,7 +41,7 @@ class JackInternalClient : public JackClient


public: public:


JackInternalClient(JackServer* server, JackSynchro** table);
JackInternalClient(JackServer* server, JackSynchro* table);
virtual ~JackInternalClient(); virtual ~JackInternalClient();


int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status);
@@ -122,7 +121,7 @@ class JackLoadableInternalClient : public JackInternalClient


public: public:


JackLoadableInternalClient(JackServer* server, JackSynchro** table, const char* so_name, const char* object_data);
JackLoadableInternalClient(JackServer* server, JackSynchro* table, const char* so_name, const char* object_data);
virtual ~JackLoadableInternalClient(); virtual ~JackLoadableInternalClient();


int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status);


+ 1
- 1
common/JackInternalClientChannel.h View File

@@ -29,7 +29,7 @@ namespace Jack
\brief JackClientChannel for server internal clients. \brief JackClientChannel for server internal clients.
*/ */


class JackInternalClientChannel : public JackClientChannelInterface
class JackInternalClientChannel : public detail::JackClientChannelInterface
{ {


private: private:


+ 7
- 8
common/JackLibClient.cpp View File

@@ -25,13 +25,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "JackTime.h" #include "JackTime.h"
#include "JackLibGlobals.h" #include "JackLibGlobals.h"
#include "JackGlobals.h" #include "JackGlobals.h"
#include "JackChannel.h"
#include "JackPlatformClientChannel.h"
#include "JackTools.h" #include "JackTools.h"


namespace Jack namespace Jack
{ {



// Used for external C API (JackAPI.cpp) // Used for external C API (JackAPI.cpp)
JackGraphManager* GetGraphManager() JackGraphManager* GetGraphManager()
{ {
@@ -51,7 +50,7 @@ JackEngineControl* GetEngineControl()
} }
} }


JackSynchro** GetSynchroTable()
JackSynchro* GetSynchroTable()
{ {
return (JackLibGlobals::fGlobals ? JackLibGlobals::fGlobals->fSynchroTable : 0); return (JackLibGlobals::fGlobals ? JackLibGlobals::fGlobals->fSynchroTable : 0);
} }
@@ -60,10 +59,10 @@ JackSynchro** GetSynchroTable()
// Client management // Client management
//------------------- //-------------------


JackLibClient::JackLibClient(JackSynchro** table): JackClient(table)
JackLibClient::JackLibClient(JackSynchro* table): JackClient(table)
{ {
jack_log("JackLibClient::JackLibClient table = %x", table); jack_log("JackLibClient::JackLibClient table = %x", table);
fChannel = JackGlobals::MakeClientChannel();
fChannel = new JackClientChannel();
} }


JackLibClient::~JackLibClient() JackLibClient::~JackLibClient()
@@ -113,7 +112,7 @@ int JackLibClient::Open(const char* server_name, const char* name, jack_options_
SetupDriverSync(false); SetupDriverSync(false);


// Connect shared synchro : the synchro must be usable in I/O mode when several clients live in the same process // Connect shared synchro : the synchro must be usable in I/O mode when several clients live in the same process
if (!fSynchroTable[GetClientControl()->fRefNum]->Connect(name_res, fServerName)) {
if (!fSynchroTable[GetClientControl()->fRefNum].Connect(name_res, fServerName)) {
jack_error("Cannot ConnectSemaphore %s client", name_res); jack_error("Cannot ConnectSemaphore %s client", name_res);
goto error; goto error;
} }
@@ -140,13 +139,13 @@ int JackLibClient::ClientNotifyImp(int refnum, const char* name, int notify, int
case kAddClient: case kAddClient:
jack_log("JackClient::AddClient name = %s, ref = %ld ", name, refnum); jack_log("JackClient::AddClient name = %s, ref = %ld ", name, refnum);
// the synchro must be usable in I/O mode when several clients live in the same process // the synchro must be usable in I/O mode when several clients live in the same process
res = fSynchroTable[refnum]->Connect(name, fServerName) ? 0 : -1;
res = fSynchroTable[refnum].Connect(name, fServerName) ? 0 : -1;
break; break;


case kRemoveClient: case kRemoveClient:
jack_log("JackClient::RemoveClient name = %s, ref = %ld ", name, refnum); jack_log("JackClient::RemoveClient name = %s, ref = %ld ", name, refnum);
if (strcmp(GetClientControl()->fName, name) != 0) if (strcmp(GetClientControl()->fName, name) != 0)
res = fSynchroTable[refnum]->Disconnect() ? 0 : -1;
res = fSynchroTable[refnum].Disconnect() ? 0 : -1;
break; break;
} }




+ 1
- 1
common/JackLibClient.h View File

@@ -41,7 +41,7 @@ class JackLibClient : public JackClient


public: public:


JackLibClient(JackSynchro** table);
JackLibClient(JackSynchro* table);
virtual ~JackLibClient(); virtual ~JackLibClient();


int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status); int Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status);


+ 3
- 7
common/JackLibGlobals.h View File

@@ -27,6 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <map> #include <map>
#endif #endif
#include "JackGlobals.h" #include "JackGlobals.h"
#include "JackPlatformSynchro.h"
#include "JackGraphManager.h" #include "JackGraphManager.h"
#include "JackMessageBuffer.h" #include "JackMessageBuffer.h"
#include "JackTime.h" #include "JackTime.h"
@@ -46,7 +47,7 @@ struct JackLibGlobals
{ {
JackShmReadWritePtr<JackGraphManager> fGraphManager; /*! Shared memory Port manager */ JackShmReadWritePtr<JackGraphManager> fGraphManager; /*! Shared memory Port manager */
JackShmReadWritePtr<JackEngineControl> fEngineControl; /*! Shared engine control */ // transport engine has to be writable JackShmReadWritePtr<JackEngineControl> fEngineControl; /*! Shared engine control */ // transport engine has to be writable
JackSynchro* fSynchroTable[CLIENT_NUM]; /*! Shared synchro table */
JackSynchro fSynchroTable[CLIENT_NUM]; /*! Shared synchro table */
#ifdef __APPLE__ #ifdef __APPLE__
std::map<mach_port_t, JackClient*> fClientTable; /*! Client table */ std::map<mach_port_t, JackClient*> fClientTable; /*! Client table */
#endif #endif
@@ -58,8 +59,6 @@ struct JackLibGlobals
{ {
jack_log("JackLibGlobals"); jack_log("JackLibGlobals");
JackMessageBuffer::Create(); JackMessageBuffer::Create();
for (int i = 0; i < CLIENT_NUM; i++)
fSynchroTable[i] = JackGlobals::MakeSynchro();
fGraphManager = -1; fGraphManager = -1;
fEngineControl = -1; fEngineControl = -1;
} }
@@ -68,8 +67,7 @@ struct JackLibGlobals
{ {
jack_log("~JackLibGlobals"); jack_log("~JackLibGlobals");
for (int i = 0; i < CLIENT_NUM; i++) { for (int i = 0; i < CLIENT_NUM; i++) {
fSynchroTable[i]->Disconnect();
delete fSynchroTable[i];
fSynchroTable[i].Disconnect();
} }
JackMessageBuffer::Destroy(); JackMessageBuffer::Destroy();
} }
@@ -78,7 +76,6 @@ struct JackLibGlobals
{ {
if (fClientCount++ == 0 && !fGlobals) { if (fClientCount++ == 0 && !fGlobals) {
jack_log("JackLibGlobals Init %x", fGlobals); jack_log("JackLibGlobals Init %x", fGlobals);
JackGlobals::InitClient();
InitTime(); InitTime();
fGlobals = new JackLibGlobals(); fGlobals = new JackLibGlobals();
} }
@@ -90,7 +87,6 @@ struct JackLibGlobals
jack_log("JackLibGlobals Destroy %x", fGlobals); jack_log("JackLibGlobals Destroy %x", fGlobals);
delete fGlobals; delete fGlobals;
fGlobals = NULL; fGlobals = NULL;
JackGlobals::Destroy();
} }
} }




+ 1
- 1
common/JackLockedEngine.h View File

@@ -38,7 +38,7 @@ class JackLockedEngine : public JackEngineInterface, public JackLockAble


public: public:


JackLockedEngine(JackGraphManager* manager, JackSynchro** table, JackEngineControl* controler):
JackLockedEngine(JackGraphManager* manager, JackSynchro* table, JackEngineControl* controler):
fEngine(manager, table, controler) fEngine(manager, table, controler)
{} {}
~JackLockedEngine() ~JackLockedEngine()


+ 1
- 1
common/JackLoopbackDriver.h View File

@@ -35,7 +35,7 @@ class JackLoopbackDriver : public JackAudioDriver


public: public:


JackLoopbackDriver(JackEngineInterface* engine, JackSynchro** table)
JackLoopbackDriver(JackEngineInterface* engine, JackSynchro* table)
: JackAudioDriver("loopback", "", engine, table) : JackAudioDriver("loopback", "", engine, table)
{} {}
virtual ~JackLoopbackDriver() virtual ~JackLoopbackDriver()


+ 8
- 11
common/JackMessageBuffer.cpp View File

@@ -40,11 +40,10 @@ namespace Jack


JackMessageBuffer* JackMessageBuffer::fInstance = NULL; JackMessageBuffer* JackMessageBuffer::fInstance = NULL;


JackMessageBuffer::JackMessageBuffer():fInBuffer(0),fOutBuffer(0),fOverruns(0)
JackMessageBuffer::JackMessageBuffer()
:fThread(this),fInBuffer(0),fOutBuffer(0),fOverruns(0)
{ {
fThread = JackGlobals::MakeThread(this);
fSignal = JackGlobals::MakeInterProcessSync();
fThread->StartSync();
fThread.StartSync();
} }


JackMessageBuffer::~JackMessageBuffer() JackMessageBuffer::~JackMessageBuffer()
@@ -54,12 +53,10 @@ JackMessageBuffer::~JackMessageBuffer()
} else { } else {
jack_info("no message buffer overruns"); jack_info("no message buffer overruns");
} }
fThread->SetStatus(JackThread::kIdle);
fSignal->Signal();
fThread->Stop();
fThread.SetStatus(JackThread::kIdle);
fSignal.Signal();
fThread.Stop();
Flush(); Flush();
delete fThread;
delete fSignal;
} }


void JackMessageBuffer::Flush() void JackMessageBuffer::Flush()
@@ -76,7 +73,7 @@ void JackMessageBuffer::AddMessage(int level, const char *message)
fBuffers[fInBuffer].level = level; fBuffers[fInBuffer].level = level;
strncpy(fBuffers[fInBuffer].message, message, MB_BUFFERSIZE); strncpy(fBuffers[fInBuffer].message, message, MB_BUFFERSIZE);
fInBuffer = MB_NEXT(fInBuffer); fInBuffer = MB_NEXT(fInBuffer);
fSignal->SignalAll();
fSignal.SignalAll();
fMutex.Unlock(); fMutex.Unlock();
} else { /* lock collision */ } else { /* lock collision */
INC_ATOMIC(&fOverruns); INC_ATOMIC(&fOverruns);
@@ -85,7 +82,7 @@ void JackMessageBuffer::AddMessage(int level, const char *message)
bool JackMessageBuffer::Execute() bool JackMessageBuffer::Execute()
{ {
fSignal->Wait();
fSignal.Wait();
fMutex.Lock(); fMutex.Lock();
Flush(); Flush();
fMutex.Unlock(); fMutex.Unlock();


+ 4
- 4
common/JackMessageBuffer.h View File

@@ -30,10 +30,10 @@
#ifndef __JackMessageBuffer__ #ifndef __JackMessageBuffer__
#define __JackMessageBuffer__ #define __JackMessageBuffer__


#include "JackThread.h"
#include "JackPlatformThread.h"
#include "JackMutex.h" #include "JackMutex.h"
#include "JackAtomic.h" #include "JackAtomic.h"
#include "JackSyncInterface.h"
#include "JackPlatformProcessSync.h"


namespace Jack namespace Jack
{ {
@@ -56,8 +56,8 @@ class JackMessageBuffer : public JackRunnableInterface
JackMessage fBuffers[MB_BUFFERS]; JackMessage fBuffers[MB_BUFFERS];
JackMutex fMutex; JackMutex fMutex;
JackThread* fThread;
JackSyncInterface* fSignal;
JackThread fThread;
JackProcessSync fSignal;
volatile unsigned int fInBuffer; volatile unsigned int fInBuffer;
volatile unsigned int fOutBuffer; volatile unsigned int fOutBuffer;
SInt32 fOverruns; SInt32 fOverruns;


+ 59
- 0
common/JackPlatformClientChannel.h View File

@@ -0,0 +1,59 @@
/*
Copyright (C) 2004-2008 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __JackPlatformClientChannel__
#define __JackPlatformClientChannel___

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
// OSX
#if defined(__APPLE__)
#include "JackMachClientChannel.h"
#endif

// WINDOWS
#ifdef WIN32
#include "JackWinNamedPipeClientChannel.h"
#endif

// LINUX
#ifdef __linux__
#include "JackSocketClientChannel.h"
#endif

namespace Jack
{

#ifdef WIN32
typedef JackWinNamedPipeClientChannel JackClientChannel;

#elif defined(SOCKET_RPC_POSIX_SEMA) || defined(SOCKET_RPC_FIFO_SEMA) || defined(SOCKET_RPC_FIFO_SEMA_DUMMY) \
|| defined(SOCKET_RPC_MACH_SEMA)
typedef JackSocketClientChannel JackClientChannel;

#elif defined(MACH_RPC_MACH_SEMA) || defined(MACH_RPC_FIFO_SEMA) || defined(MACH_RPC_POSIX_SEMA)
typedef JackMachClientChannel JackClientChannel;

#endif

} // end of namespace

#endif /* __JackPlatformClientChannel__ */

+ 59
- 0
common/JackPlatformNotifyChannel.h View File

@@ -0,0 +1,59 @@
/*
Copyright (C) 2004-2008 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __JackPlatformNotifyChannel__
#define __JackPlatformNotifyChannel__

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

// OSX
#if defined(__APPLE__)
#include "JackMachNotifyChannel.h"
#endif

// WINDOWS
#ifdef WIN32
#include "JackWinNamedPipeNotifyChannel.h"
#endif

// LINUX
#ifdef __linux__
#include "JackSocketNotifyChannel.h"
#endif

namespace Jack
{

#ifdef WIN32
typedef JackWinNamedPipeNotifyChannel JackNotifyChannel;

#elif defined(SOCKET_RPC_POSIX_SEMA) || defined(SOCKET_RPC_FIFO_SEMA) || defined(SOCKET_RPC_FIFO_SEMA_DUMMY) \
|| defined(SOCKET_RPC_MACH_SEMA)
typedef JackSocketNotifyChannel JackNotifyChannel;

#elif defined(MACH_RPC_MACH_SEMA) || defined(MACH_RPC_FIFO_SEMA) || defined(MACH_RPC_POSIX_SEMA)
typedef JackMachNotifyChannel JackNotifyChannel;

#endif

} // end of namespace

#endif /* __JackPlatformNotifyChannel__ */

+ 51
- 0
common/JackPlatformProcessSync.h View File

@@ -0,0 +1,51 @@
/*
Copyright (C) 2004-2008 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __JackPlatformProcessSync__
#define __JackPlatformProcessSync__

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

// OSX
#if defined(__APPLE__)
#include "JackProcessSync.h"
#endif

// WINDOWS
#ifdef WIN32
#include "JackWinProcessSync.h"
#endif

// LINUX
#ifdef __linux__
#include "JackProcessSync.h"
#endif

namespace Jack
{

#ifdef WIN32
typedef JackWinProcessSync JackProcessSync;
#endif

} // end of namespace

#endif /* __JackPlatformProcessSync__ */

+ 59
- 0
common/JackPlatformServerChannel.h View File

@@ -0,0 +1,59 @@
/*
Copyright (C) 2004-2008 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __JackPlatformServerChannel__
#define __JackPlatformServerChannel___

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

// OSX
#if defined(__APPLE__)
#include "JackMachServerChannel.h"
#endif

// WINDOWS
#ifdef WIN32
#include "JackWinNamedPipeServerChannel.h"
#endif

// LINUX
#ifdef __linux__
#include "JackSocketServerChannel.h"
#endif

namespace Jack
{

#ifdef WIN32
typedef JackWinNamedPipeServerChannel JackServerChannel;

#elif defined(SOCKET_RPC_POSIX_SEMA) || defined(SOCKET_RPC_FIFO_SEMA) || defined(SOCKET_RPC_FIFO_SEMA_DUMMY) \
|| defined(SOCKET_RPC_MACH_SEMA)
typedef JackSocketServerChannel JackServerChannel;

#elif defined(MACH_RPC_MACH_SEMA) || defined(MACH_RPC_FIFO_SEMA) || defined(MACH_RPC_POSIX_SEMA)
typedef JackMachServerChannel JackServerChannel;

#endif

} // end of namespace

#endif /* __JackPlatformServerChannel__ */

+ 59
- 0
common/JackPlatformServerNotifyChannel.h View File

@@ -0,0 +1,59 @@
/*
Copyright (C) 2004-2008 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __JackPlatformServerNotifyChannel__
#define __JackPlatformServerNotifyChannel___

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

// OSX
#if defined(__APPLE__)
#include "JackMachServerNotifyChannel.h"
#endif

// WINDOWS
#ifdef WIN32
#include "JackWinNamedPipeServerNotifyChannel.h"
#endif

// LINUX
#ifdef __linux__
#include "JackSocketServerNotifyChannel.h"
#endif

namespace Jack
{

#ifdef WIN32
typedef JackWinNamedPipeServerNotifyChannel JackServerNotifyChannel;

#elif defined(SOCKET_RPC_POSIX_SEMA) || defined(SOCKET_RPC_FIFO_SEMA) || defined(SOCKET_RPC_FIFO_SEMA_DUMMY) \
|| defined(SOCKET_RPC_MACH_SEMA)
typedef JackSocketServerNotifyChannel JackServerNotifyChannel;

#elif defined(MACH_RPC_MACH_SEMA) || defined(MACH_RPC_FIFO_SEMA) || defined(MACH_RPC_POSIX_SEMA)
typedef JackMachServerNotifyChannel JackServerNotifyChannel;

#endif

} // end of namespace

#endif /* __JackPlatformServerNotifyChannel__ */

+ 64
- 0
common/JackPlatformSynchro.h View File

@@ -0,0 +1,64 @@
/*
Copyright (C) 2004-2008 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __JackPlatformSynchro__
#define __JackPlatformSynchro__

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

// OSX
#if defined(__APPLE__)
#include "JackMachSemaphore.h"
#endif

// WINDOWS
#ifdef WIN32
#include "JackWinSemaphore.h"
#endif

// LINUX
#ifdef __linux__
#include "JackPosixSemaphore.h"
#include "JackFifo.h"
#endif

namespace Jack
{

#ifdef WIN32
typedef JackWinSemaphore JackSynchro;
#endif

#if defined(MACH_RPC_MACH_SEMA) || defined(SOCKET_RPC_MACH_SEMA)
typedef JackMachSemaphore JackSynchro;
#endif

#if defined(SOCKET_RPC_POSIX_SEMA) || defined(MACH_RPC_POSIX_SEMA)
typedef JackPosixSemaphore JackSynchro;
#endif

#if defined(SOCKET_RPC_FIFO_SEMA) || defined(SOCKET_RPC_FIFO_SEMA_DUMMY) || defined(MACH_RPC_FIFO_SEMA)
typedef JackFifo JackSynchro;
#endif

} // end of namespace

#endif /* __JackPlatformSynchro__ */

+ 59
- 0
common/JackPlatformThread.h View File

@@ -0,0 +1,59 @@
/*
Copyright (C) 2004-2008 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __JackPlatformThread__
#define __JackPlatformThread__

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

// OSX
#if defined(__APPLE__)
#include "JackMachThread.h"
#endif

// WINDOWS
#ifdef WIN32
#include "JackWinThread.h"
#endif

// LINUX
#ifdef __linux__
#include "JackPosixThread.h"
#endif

namespace Jack
{

#ifdef WIN32
typedef JackWinThread JackThread;
#endif

#ifdef __linux__
typedef JackPosixThread JackThread;
#endif

#if defined(__APPLE__)
typedef JackMachThread JackThread;
#endif

} // end of namespace

#endif /* __JackPlatformThread__ */

+ 2
- 4
common/JackPosixSemaphore.h View File

@@ -33,7 +33,7 @@ namespace Jack
\brief Inter process synchronization using POSIX semaphore. \brief Inter process synchronization using POSIX semaphore.
*/ */


class JackPosixSemaphore : public JackSynchro
class JackPosixSemaphore : public detail::JackSynchro
{ {


private: private:
@@ -46,9 +46,7 @@ class JackPosixSemaphore : public JackSynchro


public: public:


JackPosixSemaphore(): JackSynchro(), fSemaphore(NULL)
{}
virtual ~JackPosixSemaphore()
JackPosixSemaphore(): fSemaphore(NULL)
{} {}


bool Signal(); bool Signal();


+ 10
- 16
common/JackPosixThread.h View File

@@ -35,7 +35,7 @@ namespace Jack
\brief The POSIX thread base class. \brief The POSIX thread base class.
*/ */


class JackPosixThread : public JackThread
class JackPosixThread : public detail::JackThread
{ {


protected: protected:
@@ -48,25 +48,19 @@ class JackPosixThread : public JackThread
JackPosixThread(JackRunnableInterface* runnable, bool real_time, int priority, int cancellation) JackPosixThread(JackRunnableInterface* runnable, bool real_time, int priority, int cancellation)
: JackThread(runnable, priority, real_time, cancellation), fThread((pthread_t)NULL) : JackThread(runnable, priority, real_time, cancellation), fThread((pthread_t)NULL)
{} {}
JackPosixThread(JackRunnableInterface* runnable)
: JackThread(runnable, 0, false, PTHREAD_CANCEL_DEFERRED), fThread((pthread_t)NULL)
{}
JackPosixThread(JackRunnableInterface* runnable, int cancellation)
JackPosixThread(JackRunnableInterface* runnable, int cancellation = PTHREAD_CANCEL_ASYNCHRONOUS)
: JackThread(runnable, 0, false, cancellation), fThread((pthread_t)NULL) : JackThread(runnable, 0, false, cancellation), fThread((pthread_t)NULL)
{} {}


virtual ~JackPosixThread()
{}

virtual int Start();
virtual int StartSync();
virtual int Kill();
virtual int Stop();
virtual void Terminate();
int Start();
int StartSync();
int Kill();
int Stop();
void Terminate();


virtual int AcquireRealTime();
virtual int AcquireRealTime(int priority);
virtual int DropRealTime();
int AcquireRealTime();
int AcquireRealTime(int priority);
int DropRealTime();


pthread_t GetThreadID(); pthread_t GetThreadID();




+ 7
- 7
common/JackProcessSync.h View File

@@ -20,8 +20,7 @@ This program is free software; you can redistribute it and/or modify
#ifndef __JackProcessSync__ #ifndef __JackProcessSync__
#define __JackProcessSync__ #define __JackProcessSync__


#include "JackSyncInterface.h"
#include "JackSynchro.h"
#include "JackPlatformSynchro.h"
#include <pthread.h> #include <pthread.h>
#include <sys/time.h> #include <sys/time.h>
#include <unistd.h> #include <unistd.h>
@@ -33,7 +32,7 @@ namespace Jack
\brief A synchronization primitive built using a condition variable. \brief A synchronization primitive built using a condition variable.
*/ */


class JackProcessSync : public JackSyncInterface
class JackProcessSync
{ {


private: private:
@@ -43,12 +42,13 @@ class JackProcessSync : public JackSyncInterface


public: public:


JackProcessSync(): JackSyncInterface()
JackProcessSync()
{ {
pthread_mutex_init(&fLock, NULL); pthread_mutex_init(&fLock, NULL);
pthread_cond_init(&fCond, NULL); pthread_cond_init(&fCond, NULL);
} }
virtual ~JackProcessSync()

~JackProcessSync()
{ {
pthread_mutex_destroy(&fLock); pthread_mutex_destroy(&fLock);
pthread_cond_destroy(&fCond); pthread_cond_destroy(&fCond);
@@ -91,7 +91,7 @@ class JackProcessSync : public JackSyncInterface
\brief A synchronization primitive built using an inter-process synchronization object. \brief A synchronization primitive built using an inter-process synchronization object.
*/ */


class JackInterProcessSync : public JackSyncInterface
class JackInterProcessSync
{ {


private: private:
@@ -102,7 +102,7 @@ class JackInterProcessSync : public JackSyncInterface


JackInterProcessSync(JackSynchro* synchro): fSynchro(synchro) JackInterProcessSync(JackSynchro* synchro): fSynchro(synchro)
{} {}
virtual ~JackInterProcessSync()
~JackInterProcessSync()
{ {
delete fSynchro; delete fSynchro;
} }


+ 7
- 14
common/JackServer.cpp View File

@@ -37,7 +37,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackChannel.h" #include "JackChannel.h"
#include "JackClientControl.h" #include "JackClientControl.h"
#include "JackEngineControl.h" #include "JackEngineControl.h"
#include "JackSyncInterface.h"
#include "JackGraphManager.h" #include "JackGraphManager.h"
#include "JackInternalClient.h" #include "JackInternalClient.h"
#include "JackError.h" #include "JackError.h"
@@ -50,14 +49,11 @@ JackServer* JackServer::fInstance = NULL;


JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, long loopback, bool verbose, const char* server_name) JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long priority, long loopback, bool verbose, const char* server_name)
{ {
for (int i = 0; i < CLIENT_NUM; i++)
fSynchroTable[i] = JackGlobals::MakeSynchro();
fGraphManager = new JackGraphManager(); fGraphManager = new JackGraphManager();
fEngineControl = new JackEngineControl(sync, temporary, timeout, rt, priority, verbose, server_name); fEngineControl = new JackEngineControl(sync, temporary, timeout, rt, priority, verbose, server_name);
fEngine = new JackLockedEngine(fGraphManager, fSynchroTable, fEngineControl);
fFreewheelDriver = new JackThreadedDriver(new JackFreewheelDriver(fEngine, fSynchroTable));
fLoopbackDriver = new JackLoopbackDriver(fEngine, fSynchroTable);
fChannel = JackGlobals::MakeServerChannel();
fEngine = new JackLockedEngine(fGraphManager, GetSynchroTable(), fEngineControl);
fFreewheelDriver = new JackThreadedDriver(new JackFreewheelDriver(fEngine, GetSynchroTable()));
fLoopbackDriver = new JackLoopbackDriver(fEngine, GetSynchroTable());
fFreewheel = false; fFreewheel = false;
fLoopback = loopback; fLoopback = loopback;
fDriverInfo = NULL; fDriverInfo = NULL;
@@ -68,14 +64,11 @@ JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long pr


JackServer::~JackServer() JackServer::~JackServer()
{ {
for (int i = 0; i < CLIENT_NUM; i++)
delete fSynchroTable[i];
delete fGraphManager; delete fGraphManager;
delete fAudioDriver; delete fAudioDriver;
delete fFreewheelDriver; delete fFreewheelDriver;
delete fLoopbackDriver; delete fLoopbackDriver;
delete fEngine; delete fEngine;
delete fChannel;
delete fEngineControl; delete fEngineControl;
if (fDriverInfo) { if (fDriverInfo) {
UnloadDriverModule(fDriverInfo->handle); UnloadDriverModule(fDriverInfo->handle);
@@ -90,7 +83,7 @@ int JackServer::Open(jack_driver_desc_t* driver_desc, JSList* driver_params)
// TODO: move that in reworked JackServerGlobals::Init() // TODO: move that in reworked JackServerGlobals::Init()
JackMessageBuffer::Create(); JackMessageBuffer::Create();
if (fChannel->Open(fEngineControl->fServerName, this) < 0) {
if (fChannel.Open(fEngineControl->fServerName, this) < 0) {
jack_error("Server channel open error"); jack_error("Server channel open error");
return -1; return -1;
} }
@@ -104,7 +97,7 @@ int JackServer::Open(jack_driver_desc_t* driver_desc, JSList* driver_params)
return -1; return -1;
} }


if ((fAudioDriver = fDriverInfo->initialize(fEngine, fSynchroTable, driver_params)) == NULL) {
if ((fAudioDriver = fDriverInfo->initialize(fEngine, GetSynchroTable(), driver_params)) == NULL) {
jack_error("Cannot initialize driver"); jack_error("Cannot initialize driver");
return -1; return -1;
} }
@@ -142,7 +135,7 @@ int JackServer::Open(jack_driver_desc_t* driver_desc, JSList* driver_params)
int JackServer::Close() int JackServer::Close()
{ {
jack_log("JackServer::Close"); jack_log("JackServer::Close");
fChannel->Close();
fChannel.Close();
fAudioDriver->Detach(); fAudioDriver->Detach();
if (fLoopback > 0) if (fLoopback > 0)
fLoopbackDriver->Detach(); fLoopbackDriver->Detach();
@@ -303,7 +296,7 @@ JackEngineInterface* JackServer::GetEngine()
return fEngine; return fEngine;
} }


JackSynchro** JackServer::GetSynchroTable()
JackSynchro* JackServer::GetSynchroTable()
{ {
return fSynchroTable; return fSynchroTable;
} }


+ 8
- 6
common/JackServer.h View File

@@ -28,14 +28,16 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "jslist.h" #include "jslist.h"


#include "JackGlobals.h" #include "JackGlobals.h"
#include "JackPlatformSynchro.h"
#include "JackPlatformSynchro.h"
#include "JackPlatformServerChannel.h"



namespace Jack namespace Jack
{ {


class JackGraphManager; class JackGraphManager;
class JackDriverClientInterface; class JackDriverClientInterface;
class JackServerChannelInterface;
class JackSyncInterface;
struct JackEngineControl; struct JackEngineControl;
class JackEngineInterface; class JackEngineInterface;


@@ -43,7 +45,7 @@ class JackEngineInterface;
\brief The Jack server. \brief The Jack server.
*/ */


class EXPORT JackServer : private detail::JackGlobalsServerInitializer
class EXPORT JackServer
{ {


private: private:
@@ -55,9 +57,9 @@ class EXPORT JackServer : private detail::JackGlobalsServerInitializer
JackEngineInterface* fEngine; JackEngineInterface* fEngine;
JackEngineControl* fEngineControl; JackEngineControl* fEngineControl;
JackGraphManager* fGraphManager; JackGraphManager* fGraphManager;
JackServerChannelInterface* fChannel;
JackServerChannel fChannel;
JackConnectionManager fConnectionState; JackConnectionManager fConnectionState;
JackSynchro* fSynchroTable[CLIENT_NUM];
JackSynchro fSynchroTable[CLIENT_NUM];
bool fFreewheel; bool fFreewheel;
long fLoopback; long fLoopback;


@@ -88,7 +90,7 @@ class EXPORT JackServer : private detail::JackGlobalsServerInitializer
// Object access // Object access
JackEngineInterface* GetEngine(); JackEngineInterface* GetEngine();
JackEngineControl* GetEngineControl(); JackEngineControl* GetEngineControl();
JackSynchro** GetSynchroTable();
JackSynchro* GetSynchroTable();
JackGraphManager* GetGraphManager(); JackGraphManager* GetGraphManager();


static JackServer* fInstance; // Unique instance static JackServer* fInstance; // Unique instance


+ 4
- 4
common/JackServerLaunch.cpp View File

@@ -29,6 +29,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "JackChannel.h" #include "JackChannel.h"
#include "JackLibGlobals.h" #include "JackLibGlobals.h"
#include "JackServerLaunch.h" #include "JackServerLaunch.h"
#include "JackPlatformClientChannel.h"


using namespace Jack; using namespace Jack;


@@ -210,10 +211,9 @@ int start_server(const char* server_name, jack_options_t options)


int server_connect(char* server_name) int server_connect(char* server_name)
{ {
JackClientChannelInterface* channel = JackGlobals::MakeClientChannel();
int res = channel->ServerCheck(server_name);
channel->Close();
delete channel;
JackClientChannel channel;
int res = channel.ServerCheck(server_name);
channel.Close();
return res; return res;
} }




+ 5
- 5
common/JackSocketClientChannel.cpp View File

@@ -29,16 +29,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
namespace Jack namespace Jack
{ {


JackSocketClientChannel::JackSocketClientChannel()
JackSocketClientChannel::JackSocketClientChannel():
fThread(this)
{ {
fThread = JackGlobals::MakeThread(this);
fNotificationSocket = NULL; fNotificationSocket = NULL;
fClient = NULL; fClient = NULL;
} }


JackSocketClientChannel::~JackSocketClientChannel() JackSocketClientChannel::~JackSocketClientChannel()
{ {
delete fThread;
delete fNotificationSocket; delete fNotificationSocket;
} }


@@ -105,7 +104,7 @@ int JackSocketClientChannel::Start()
/* /*
To be sure notification thread is started before ClientOpen is called. To be sure notification thread is started before ClientOpen is called.
*/ */
if (fThread->StartSync() != 0) {
if (fThread.StartSync() != 0) {
jack_error("Cannot start Jack client listener"); jack_error("Cannot start Jack client listener");
return -1; return -1;
} else { } else {
@@ -113,10 +112,11 @@ int JackSocketClientChannel::Start()
} }
} }



void JackSocketClientChannel::Stop() void JackSocketClientChannel::Stop()
{ {
jack_log("JackSocketClientChannel::Stop"); jack_log("JackSocketClientChannel::Stop");
fThread->Kill();
fThread.Kill();
} }


void JackSocketClientChannel::ServerSyncCall(JackRequest* req, JackResult* res, int* result) void JackSocketClientChannel::ServerSyncCall(JackRequest* req, JackResult* res, int* result)


+ 5
- 3
common/JackSocketClientChannel.h View File

@@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


#include "JackChannel.h" #include "JackChannel.h"
#include "JackSocket.h" #include "JackSocket.h"
#include "JackThread.h"
#include "JackPlatformThread.h"
#include "JackRequest.h" #include "JackRequest.h"


namespace Jack namespace Jack
@@ -32,7 +32,7 @@ namespace Jack
\brief JackClientChannel using sockets. \brief JackClientChannel using sockets.
*/ */


class JackSocketClientChannel : public JackClientChannelInterface, public JackRunnableInterface
class JackSocketClientChannel : public detail::JackClientChannelInterface, public JackRunnableInterface
{ {


private: private:
@@ -40,7 +40,7 @@ class JackSocketClientChannel : public JackClientChannelInterface, public JackRu
JackClientSocket fRequestSocket; // Socket to communicate with the server JackClientSocket fRequestSocket; // Socket to communicate with the server
JackServerSocket fNotificationListenSocket; // Socket listener for server notification JackServerSocket fNotificationListenSocket; // Socket listener for server notification
JackClientSocket* fNotificationSocket; // Socket for server notification JackClientSocket* fNotificationSocket; // Socket for server notification
JackThread* fThread; // Thread to execute the event loop
JackThread fThread; // Thread to execute the event loop
JackClient* fClient; JackClient* fClient;


void ServerSyncCall(JackRequest* req, JackResult* res, int* result); void ServerSyncCall(JackRequest* req, JackResult* res, int* result);
@@ -61,6 +61,8 @@ class JackSocketClientChannel : public JackClientChannelInterface, public JackRu


void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result); void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result);
void ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result); void ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, int* result)
{}
void ClientClose(int refnum, int* result); void ClientClose(int refnum, int* result);


void ClientActivate(int refnum, int state, int* result); void ClientActivate(int refnum, int state, int* result);


+ 1
- 3
common/JackSocketNotifyChannel.h View File

@@ -30,7 +30,7 @@ namespace Jack
\brief JackNotifyChannel using sockets. \brief JackNotifyChannel using sockets.
*/ */


class JackSocketNotifyChannel : public JackNotifyChannelInterface
class JackSocketNotifyChannel
{ {


private: private:
@@ -41,8 +41,6 @@ class JackSocketNotifyChannel : public JackNotifyChannelInterface


JackSocketNotifyChannel() JackSocketNotifyChannel()
{} {}
virtual ~JackSocketNotifyChannel()
{}


int Open(const char* name); // Open the Server/Client connection int Open(const char* name); // Open the Server/Client connection
void Close(); // Close the Server/Client connection void Close(); // Close the Server/Client connection


+ 4
- 5
common/JackSocketServerChannel.cpp View File

@@ -35,16 +35,15 @@ using namespace std;
namespace Jack namespace Jack
{ {


JackSocketServerChannel::JackSocketServerChannel()
JackSocketServerChannel::JackSocketServerChannel():
fThread(this)
{ {
fThread = JackGlobals::MakeThread(this);
fPollTable = NULL; fPollTable = NULL;
fRebuild = true; fRebuild = true;
} }


JackSocketServerChannel::~JackSocketServerChannel() JackSocketServerChannel::~JackSocketServerChannel()
{ {
delete fThread;
delete[] fPollTable; delete[] fPollTable;
} }


@@ -63,7 +62,7 @@ int JackSocketServerChannel::Open(const char* server_name, JackServer* server)
BuildPoolTable(); BuildPoolTable();


// Start listening // Start listening
if (fThread->Start() != 0) {
if (fThread.Start() != 0) {
jack_error("Cannot start Jack server listener"); jack_error("Cannot start Jack server listener");
goto error; goto error;
} }
@@ -77,7 +76,7 @@ error:


void JackSocketServerChannel::Close() void JackSocketServerChannel::Close()
{ {
fThread->Kill();
fThread.Kill();
fRequestListenSocket.Close(); fRequestListenSocket.Close();
} }




+ 4
- 4
common/JackSocketServerChannel.h View File

@@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


#include "JackChannel.h" #include "JackChannel.h"
#include "JackSocket.h" #include "JackSocket.h"
#include "JackThread.h"
#include "JackPlatformThread.h"
#include <poll.h> #include <poll.h>
#include <map> #include <map>


@@ -33,13 +33,13 @@ namespace Jack
\brief JackServerChannel using sockets. \brief JackServerChannel using sockets.
*/ */


class JackSocketServerChannel : public JackServerChannelInterface, public JackRunnableInterface
class JackSocketServerChannel : public JackRunnableInterface
{ {


private: private:


JackServerSocket fRequestListenSocket; // Socket to create request socket for the client JackServerSocket fRequestListenSocket; // Socket to create request socket for the client
JackThread* fThread; // Thread to execute the event loop
JackThread fThread; // Thread to execute the event loop
JackServer* fServer; JackServer* fServer;
pollfd* fPollTable; pollfd* fPollTable;
bool fRebuild; bool fRebuild;
@@ -56,7 +56,7 @@ class JackSocketServerChannel : public JackServerChannelInterface, public JackRu
public: public:


JackSocketServerChannel(); JackSocketServerChannel();
virtual ~JackSocketServerChannel();
~JackSocketServerChannel();


int Open(const char* server_name, JackServer* server); // Open the Server/Client connection int Open(const char* server_name, JackServer* server); // Open the Server/Client connection
void Close(); // Close the Server/Client connection void Close(); // Close the Server/Client connection


+ 1
- 3
common/JackSocketServerNotifyChannel.h View File

@@ -30,7 +30,7 @@ namespace Jack
\brief JackServerNotifyChannel using sockets. \brief JackServerNotifyChannel using sockets.
*/ */


class JackSocketServerNotifyChannel : public JackServerNotifyChannelInterface
class JackSocketServerNotifyChannel
{ {
private: private:


@@ -40,8 +40,6 @@ class JackSocketServerNotifyChannel : public JackServerNotifyChannelInterface


JackSocketServerNotifyChannel() JackSocketServerNotifyChannel()
{} {}
virtual ~JackSocketServerNotifyChannel()
{}


int Open(const char* server_name); int Open(const char* server_name);
void Close(); void Close();


+ 0
- 52
common/JackSyncInterface.h View File

@@ -1,52 +0,0 @@
/*
Copyright (C) 2004-2006 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __JackSyncInterface__
#define __JackSyncInterface__

namespace Jack
{

/*!
\brief A synchronization primitive interface.
*/

class JackSyncInterface
{

public:

JackSyncInterface()
{}
virtual ~JackSyncInterface()
{}

virtual bool Allocate(const char* name) = 0;
virtual bool Connect(const char* name) = 0;
virtual bool TimedWait(long usec) = 0;
virtual void Wait() = 0;
virtual void Signal() = 0;
virtual void SignalAll() = 0;
virtual void Destroy() = 0;
};

} // end of namespace

#endif


+ 15
- 13
common/JackSynchro.h View File

@@ -28,6 +28,8 @@ namespace Jack
/*! /*!
\brief An inter process synchronization primitive. \brief An inter process synchronization primitive.
*/ */
namespace detail
{


class JackSynchro class JackSynchro
{ {
@@ -37,53 +39,53 @@ class JackSynchro
char fName[SYNC_MAX_NAME_SIZE]; char fName[SYNC_MAX_NAME_SIZE];
bool fFlush; // If true, signal are "flushed" : used for drivers that do no consume the signal bool fFlush; // If true, signal are "flushed" : used for drivers that do no consume the signal


virtual void BuildName(const char* name, const char* server_name, char* res)
void BuildName(const char* name, const char* server_name, char* res)
{} {}


public: public:


JackSynchro(): fFlush(false) JackSynchro(): fFlush(false)
{} {}
virtual ~JackSynchro()
~JackSynchro()
{} {}


virtual bool Signal()
bool Signal()
{ {
return true; return true;
} }
virtual bool SignalAll()
bool SignalAll()
{ {
return true; return true;
} }
virtual bool Wait()
bool Wait()
{ {
return true; return true;
} }
virtual bool TimedWait(long usec)
bool TimedWait(long usec)
{ {
return true; return true;
} }
virtual bool Allocate(const char* name, const char* server_name, int value)
bool Allocate(const char* name, const char* server_name, int value)
{ {
return true; return true;
} }
virtual bool Connect(const char* name, const char* server_name)
bool Connect(const char* name, const char* server_name)
{ {
return true; return true;
} }
virtual bool ConnectInput(const char* name, const char* server_name)
bool ConnectInput(const char* name, const char* server_name)
{ {
return true; return true;
} }
virtual bool ConnectOutput(const char* name, const char* server_name)
bool ConnectOutput(const char* name, const char* server_name)
{ {
return true; return true;
} }
virtual bool Disconnect()
bool Disconnect()
{ {
return true; return true;
} }
virtual void Destroy()
void Destroy()
{} {}


void SetFlush(bool mode) void SetFlush(bool mode)
@@ -92,7 +94,7 @@ class JackSynchro
} }


}; };
}


} // end of namespace } // end of namespace




+ 7
- 16
common/JackThread.h View File

@@ -58,6 +58,8 @@ class JackRunnableInterface
\brief The thread base class. \brief The thread base class.
*/ */


namespace detail
{
class JackThread class JackThread
{ {
public: public:
@@ -77,35 +79,24 @@ class JackThread
JackThread(JackRunnableInterface* runnable, int priority, bool real_time, int cancellation): JackThread(JackRunnableInterface* runnable, int priority, bool real_time, int cancellation):
fRunnable(runnable), fPriority(priority), fRealTime(real_time), fStatus(kIdle), fCancellation(cancellation) fRunnable(runnable), fPriority(priority), fRealTime(real_time), fStatus(kIdle), fCancellation(cancellation)
{} {}
virtual ~JackThread()
{}
virtual int Start() = 0;
virtual int StartSync() = 0;
virtual int Kill() = 0;
virtual int Stop() = 0;
virtual void Terminate() = 0;
virtual int AcquireRealTime() = 0;
virtual int AcquireRealTime(int priority) = 0;
virtual int DropRealTime() = 0;
virtual kThreadState GetStatus()
kThreadState GetStatus()
{ {
return fStatus; return fStatus;
} }
virtual void SetStatus(kThreadState status)
void SetStatus(kThreadState status)
{ {
fStatus = status; fStatus = status;
} }
virtual void SetParams(UInt64 period, UInt64 computation, UInt64 constraint) // Empty implementation, will only make sense on OSX...
void SetParams(UInt64 period, UInt64 computation, UInt64 constraint) // Empty implementation, will only make sense on OSX...
{} {}
virtual pthread_t GetThreadID() = 0;
}; };
}

} // end of namespace } // end of namespace


#if defined(WIN32) #if defined(WIN32)


+ 11
- 12
common/JackThreadedDriver.cpp View File

@@ -36,15 +36,14 @@
namespace Jack namespace Jack
{ {


JackThreadedDriver::JackThreadedDriver(JackDriverClient* driver)
JackThreadedDriver::JackThreadedDriver(JackDriverClient* driver):
fThread(this)
{ {
fThread = JackGlobals::MakeThread(this);
fDriver = driver; fDriver = driver;
} }


JackThreadedDriver::~JackThreadedDriver() JackThreadedDriver::~JackThreadedDriver()
{ {
delete fThread;
delete fDriver; delete fDriver;
} }


@@ -56,7 +55,7 @@ int JackThreadedDriver::Start()
jack_error("Cannot start driver"); jack_error("Cannot start driver");
return -1; return -1;
} }
if (fThread->Start() < 0) {
if (fThread.Start() < 0) {
jack_error("Cannot start thread"); jack_error("Cannot start thread");
return -1; return -1;
} }
@@ -68,12 +67,12 @@ int JackThreadedDriver::Stop()
{ {
jack_log("JackThreadedDriver::Stop"); jack_log("JackThreadedDriver::Stop");
switch (fThread->GetStatus()) {
switch (fThread.GetStatus()) {
// Kill the thread in Init phase // Kill the thread in Init phase
case JackThread::kStarting: case JackThread::kStarting:
case JackThread::kIniting: case JackThread::kIniting:
if (fThread->Kill() < 0) {
if (fThread.Kill() < 0) {
jack_error("Cannot kill thread"); jack_error("Cannot kill thread");
return -1; return -1;
} }
@@ -81,7 +80,7 @@ int JackThreadedDriver::Stop()
// Stop when the thread cycle is finished // Stop when the thread cycle is finished
case JackThread::kRunning: case JackThread::kRunning:
if (fThread->Stop() < 0) {
if (fThread.Stop() < 0) {
jack_error("Cannot stop thread"); jack_error("Cannot stop thread");
return -1; return -1;
} }
@@ -109,8 +108,8 @@ bool JackThreadedDriver::Init()
if (fDriver->IsRealTime()) { if (fDriver->IsRealTime()) {
jack_log("JackThreadedDriver::Init IsRealTime"); jack_log("JackThreadedDriver::Init IsRealTime");
// Will do "something" on OSX only... // Will do "something" on OSX only...
fThread->SetParams(GetEngineControl()->fPeriod, GetEngineControl()->fComputation, GetEngineControl()->fConstraint);
if (fThread->AcquireRealTime(GetEngineControl()->fPriority) < 0)
fThread.SetParams(GetEngineControl()->fPeriod, GetEngineControl()->fComputation, GetEngineControl()->fConstraint);
if (fThread.AcquireRealTime(GetEngineControl()->fPriority) < 0)
jack_error("AcquireRealTime error"); jack_error("AcquireRealTime error");
} }
return true; return true;
@@ -123,14 +122,14 @@ bool JackRestartThreadedDriver::Execute()
{ {
try { try {
// Keep running even in case of error // Keep running even in case of error
while (fThread->GetStatus() == JackThread::kRunning) {
while (fThread.GetStatus() == JackThread::kRunning) {
Process(); Process();
} }
} catch (JackDriverException e) { } catch (JackDriverException e) {
e.PrintMessage(); e.PrintMessage();
jack_log("Driver is restarted"); jack_log("Driver is restarted");
fThread->SetStatus(JackThread::kIniting);
fThread->DropRealTime();
fThread.SetStatus(JackThread::kIniting);
fThread.DropRealTime();
return Init(); return Init();
} }
return false; return false;


+ 2
- 2
common/JackThreadedDriver.h View File

@@ -22,7 +22,7 @@
#define __JackThreadedDriver__ #define __JackThreadedDriver__


#include "JackDriver.h" #include "JackDriver.h"
#include "JackThread.h"
#include "JackPlatformThread.h"


namespace Jack namespace Jack
{ {
@@ -36,7 +36,7 @@ class JackThreadedDriver : public JackDriverClientInterface, public JackRunnable


protected: protected:


JackThread* fThread;
JackThread fThread;
JackDriverClient* fDriver; JackDriverClient* fDriver;


public: public:


+ 0
- 3
common/SConscript View File

@@ -80,7 +80,6 @@ srcfiles_common_serverlib = [
'JackExternalClient.cpp', 'JackExternalClient.cpp',
'JackFrameTimer.cpp', 'JackFrameTimer.cpp',
'JackFreewheelDriver.cpp', 'JackFreewheelDriver.cpp',
'JackGlobalsServer.cpp',
'JackGraphManager.cpp', 'JackGraphManager.cpp',
'JackInternalClient.cpp', 'JackInternalClient.cpp',
'JackPort.cpp', 'JackPort.cpp',
@@ -107,7 +106,6 @@ srcfiles_common_serverlib = [
'JackDebugClient.cpp', 'JackDebugClient.cpp',
'JackTransportEngine.cpp', 'JackTransportEngine.cpp',
'JackServerGlobals.cpp', 'JackServerGlobals.cpp',
'JackServerLaunch.cpp',
'timestamps.c', 'timestamps.c',
'JackTools.cpp', 'JackTools.cpp',
'ringbuffer.c', 'ringbuffer.c',
@@ -125,7 +123,6 @@ srcfiles_common_clientlib = [
'JackServerLaunch.cpp', 'JackServerLaunch.cpp',
'JackError.cpp', 'JackError.cpp',
'JackFrameTimer.cpp', 'JackFrameTimer.cpp',
'JackGlobalsClient.cpp',
'JackGraphManager.cpp', 'JackGraphManager.cpp',
'JackLibClient.cpp', 'JackLibClient.cpp',
'JackLibAPI.cpp', 'JackLibAPI.cpp',


+ 0
- 2
common/wscript View File

@@ -46,7 +46,6 @@ def build(bld):
'JackEngine.cpp', 'JackEngine.cpp',
'JackExternalClient.cpp', 'JackExternalClient.cpp',
'JackFreewheelDriver.cpp', 'JackFreewheelDriver.cpp',
'JackGlobalsServer.cpp',
'JackInternalClient.cpp', 'JackInternalClient.cpp',
'JackLoopbackDriver.cpp', 'JackLoopbackDriver.cpp',
'JackServer.cpp', 'JackServer.cpp',
@@ -71,7 +70,6 @@ def build(bld):
clientlib.target = 'jack' clientlib.target = 'jack'
clientlib.source = [] + common_libsources clientlib.source = [] + common_libsources
clientlib.source += [ clientlib.source += [
'JackGlobalsClient.cpp',
'JackLibClient.cpp', 'JackLibClient.cpp',
'JackLibAPI.cpp', 'JackLibAPI.cpp',
'JackSocketClientChannel.cpp', 'JackSocketClientChannel.cpp',


+ 1
- 1
linux/alsa/JackAlsaDriver.cpp View File

@@ -2608,7 +2608,7 @@ extern "C"
return desc; return desc;
} }


Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro** table, const JSList* params) {
Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro* table, const JSList* params) {
jack_nframes_t srate = 48000; jack_nframes_t srate = 48000;
jack_nframes_t frames_per_interrupt = 1024; jack_nframes_t frames_per_interrupt = 1024;
unsigned long user_nperiods = 2; unsigned long user_nperiods = 2;


+ 1
- 1
linux/alsa/JackAlsaDriver.h View File

@@ -116,7 +116,7 @@ class JackAlsaDriver : public JackAudioDriver


public: public:


JackAlsaDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table): JackAudioDriver(name, alias, engine, table)
JackAlsaDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro* table): JackAudioDriver(name, alias, engine, table)
{} {}
virtual ~JackAlsaDriver() virtual ~JackAlsaDriver()
{} {}


+ 1
- 1
linux/firewire/JackFFADODriver.cpp View File

@@ -913,7 +913,7 @@ extern "C"
return desc; return desc;
} }


Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro** table, const JSList* params) {
Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro* table, const JSList* params) {
const JSList * node; const JSList * node;
const jack_driver_param_t * param; const jack_driver_param_t * param;




+ 1
- 1
linux/firewire/JackFFADODriver.h View File

@@ -62,7 +62,7 @@ class JackFFADODriver : public JackAudioDriver


public: public:


JackFFADODriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table)
JackFFADODriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro* table)
: JackAudioDriver(name, alias,engine, table) : JackAudioDriver(name, alias,engine, table)
{} {}
virtual ~JackFFADODriver() virtual ~JackFFADODriver()


+ 1
- 1
linux/freebob/JackFreebobDriver.cpp View File

@@ -1045,7 +1045,7 @@ extern "C"
return desc; return desc;
} }


Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro** table, const JSList* params) {
Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro* table, const JSList* params) {
unsigned int port = 0; unsigned int port = 0;
unsigned int node_id = -1; unsigned int node_id = -1;
int nbitems; int nbitems;


+ 1
- 1
linux/freebob/JackFreebobDriver.h View File

@@ -69,7 +69,7 @@ class JackFreebobDriver : public JackAudioDriver


public: public:


JackFreebobDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table)
JackFreebobDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro* table)
:JackAudioDriver(name, alias, engine, table) :JackAudioDriver(name, alias, engine, table)
{} {}
virtual ~JackFreebobDriver() virtual ~JackFreebobDriver()


+ 1
- 0
linux/wscript View File

@@ -28,6 +28,7 @@ def create_jack_driver_obj(bld, target, sources, uselib = None):
def build(bld): def build(bld):
jackd = bld.create_obj('cpp', 'program') jackd = bld.create_obj('cpp', 'program')
jackd.includes = ['../common/jack', '../common'] jackd.includes = ['../common/jack', '../common']
jackd.defines = 'HAVE_CONFIG_H'
jackd.source = ['../common/Jackdmp.cpp'] jackd.source = ['../common/Jackdmp.cpp']
jackd.uselib = 'PTHREAD DL RT' jackd.uselib = 'PTHREAD DL RT'
jackd.uselib_local = 'serverlib' jackd.uselib_local = 'serverlib'


+ 2
- 2
macosx/JackCoreAudioDriver.cpp View File

@@ -425,7 +425,7 @@ OSStatus JackCoreAudioDriver::GetTotalChannels(AudioDeviceID device, int* channe
return err; return err;
} }


JackCoreAudioDriver::JackCoreAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table)
JackCoreAudioDriver::JackCoreAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro* table)
: JackAudioDriver(name, alias, engine, table), fJackInputData(NULL), fDriverOutputData(NULL), fState(false), fIOUsage(1.f) : JackAudioDriver(name, alias, engine, table), fJackInputData(NULL), fDriverOutputData(NULL), fState(false), fIOUsage(1.f)
{} {}


@@ -1249,7 +1249,7 @@ extern "C"
return desc; return desc;
} }


Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro** table, const JSList* params) {
Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro* table, const JSList* params) {
jack_nframes_t srate = 44100; jack_nframes_t srate = 44100;
jack_nframes_t frames_per_interrupt = 128; jack_nframes_t frames_per_interrupt = 128;
int capture = FALSE; int capture = FALSE;


+ 1
- 1
macosx/JackCoreAudioDriver.h View File

@@ -143,7 +143,7 @@ class JackCoreAudioDriver : public JackAudioDriver


public: public:


JackCoreAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table);
JackCoreAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro* table);
virtual ~JackCoreAudioDriver(); virtual ~JackCoreAudioDriver();


int Open(jack_nframes_t frames_per_cycle, int Open(jack_nframes_t frames_per_cycle,


+ 5
- 9
macosx/JackMachClientChannel.cpp View File

@@ -33,15 +33,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
namespace Jack namespace Jack
{ {


JackMachClientChannel::JackMachClientChannel():fPrivatePort(0)
{
fThread = new JackMachThread(this);
}
JackMachClientChannel::JackMachClientChannel():fPrivatePort(0),fThread(this)
{}


JackMachClientChannel::~JackMachClientChannel() JackMachClientChannel::~JackMachClientChannel()
{
delete fThread;
}
{}


// Server <===> client // Server <===> client


@@ -118,7 +114,7 @@ int JackMachClientChannel::Start()
/* /*
To be sure notification thread is started before ClientOpen is called. To be sure notification thread is started before ClientOpen is called.
*/ */
if (fThread->StartSync() != 0) {
if (fThread.StartSync() != 0) {
jack_error("Cannot start Jack client listener"); jack_error("Cannot start Jack client listener");
return -1; return -1;
} else { } else {
@@ -129,7 +125,7 @@ int JackMachClientChannel::Start()
void JackMachClientChannel::Stop() void JackMachClientChannel::Stop()
{ {
jack_log("JackMachClientChannel::Stop"); jack_log("JackMachClientChannel::Stop");
fThread->Kill();
fThread.Kill();
} }


void JackMachClientChannel::ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result) void JackMachClientChannel::ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result)


+ 5
- 3
macosx/JackMachClientChannel.h View File

@@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


#include "JackChannel.h" #include "JackChannel.h"
#include "JackMachPort.h" #include "JackMachPort.h"
#include "JackThread.h"
#include "JackPlatformThread.h"


namespace Jack namespace Jack
{ {
@@ -33,7 +33,7 @@ class JackLibClient;
\brief JackClientChannel using Mach IPC. \brief JackClientChannel using Mach IPC.
*/ */


class JackMachClientChannel : public JackClientChannelInterface, public JackRunnableInterface
class JackMachClientChannel : public detail::JackClientChannelInterface, public JackRunnableInterface
{ {


private: private:
@@ -41,7 +41,7 @@ class JackMachClientChannel : public JackClientChannelInterface, public JackRunn
JackMachPort fClientPort; /*! Mach port to communicate with the server : from server to client */ JackMachPort fClientPort; /*! Mach port to communicate with the server : from server to client */
JackMachPort fServerPort; /*! Mach port to communicate with the server : from client to server */ JackMachPort fServerPort; /*! Mach port to communicate with the server : from client to server */
mach_port_t fPrivatePort; mach_port_t fPrivatePort;
JackThread* fThread; /*! Thread to execute the event loop */
JackThread fThread; /*! Thread to execute the event loop */


public: public:


@@ -58,6 +58,8 @@ class JackMachClientChannel : public JackClientChannelInterface, public JackRunn


void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result); void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result);
void ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result); void ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, int* result)
{}
void ClientClose(int refnum, int* result); void ClientClose(int refnum, int* result);


void ClientActivate(int refnum, int state, int* result); void ClientActivate(int refnum, int state, int* result);


+ 1
- 3
macosx/JackMachNotifyChannel.h View File

@@ -30,7 +30,7 @@ namespace Jack
\brief JackNotifyChannel using Mach IPC. \brief JackNotifyChannel using Mach IPC.
*/ */


class JackMachNotifyChannel : public JackNotifyChannelInterface
class JackMachNotifyChannel
{ {


private: private:
@@ -41,8 +41,6 @@ class JackMachNotifyChannel : public JackNotifyChannelInterface


JackMachNotifyChannel() JackMachNotifyChannel()
{} {}
virtual ~JackMachNotifyChannel()
{}


int Open(const char* name); // Open the Server/Client connection int Open(const char* name); // Open the Server/Client connection
void Close(); // Close the Server/Client connection void Close(); // Close the Server/Client connection


+ 2
- 4
macosx/JackMachSemaphore.h View File

@@ -35,7 +35,7 @@ namespace Jack
\brief Inter process synchronization using using Mach semaphore. \brief Inter process synchronization using using Mach semaphore.
*/ */


class JackMachSemaphore : public JackSynchro
class JackMachSemaphore : public detail::JackSynchro
{ {


private: private:
@@ -49,9 +49,7 @@ class JackMachSemaphore : public JackSynchro


public: public:


JackMachSemaphore(): JackSynchro(), fSemaphore(0)
{}
virtual ~JackMachSemaphore()
JackMachSemaphore(): fSemaphore(0)
{} {}


bool Signal(); bool Signal();


+ 5
- 10
macosx/JackMachServerChannel.cpp View File

@@ -25,7 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "JackRPCEngineServer.c" #include "JackRPCEngineServer.c"
#include "JackError.h" #include "JackError.h"
#include "JackServer.h" #include "JackServer.h"
#include "JackMachThread.h"
#include "JackEngine.h" #include "JackEngine.h"
#include "JackNotification.h" #include "JackNotification.h"


@@ -36,15 +35,11 @@ namespace Jack


map<mach_port_t, JackMachServerChannel*> JackMachServerChannel::fPortTable; map<mach_port_t, JackMachServerChannel*> JackMachServerChannel::fPortTable;


JackMachServerChannel::JackMachServerChannel()
{
fThread = new JackMachThread(this);
}
JackMachServerChannel::JackMachServerChannel():fThread(this)
{}


JackMachServerChannel::~JackMachServerChannel() JackMachServerChannel::~JackMachServerChannel()
{
delete fThread;
}
{}


int JackMachServerChannel::Open(const char* server_name, JackServer* server) int JackMachServerChannel::Open(const char* server_name, JackServer* server)
{ {
@@ -57,7 +52,7 @@ int JackMachServerChannel::Open(const char* server_name, JackServer* server)
return -1; return -1;
} }


if (fThread->Start() != 0) {
if (fThread.Start() != 0) {
jack_error("Cannot start Jack server listener"); jack_error("Cannot start Jack server listener");
return -1; return -1;
} }
@@ -70,7 +65,7 @@ int JackMachServerChannel::Open(const char* server_name, JackServer* server)
void JackMachServerChannel::Close() void JackMachServerChannel::Close()
{ {
jack_log("JackMachServerChannel::Close"); jack_log("JackMachServerChannel::Close");
fThread->Kill();
fThread.Kill();
fServerPort.DestroyPort(); fServerPort.DestroyPort();
} }




+ 4
- 4
macosx/JackMachServerChannel.h View File

@@ -21,7 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define __JackMachServerChannel__ #define __JackMachServerChannel__


#include "JackChannel.h" #include "JackChannel.h"
#include "JackThread.h"
#include "JackPlatformThread.h"
#include "JackMachPort.h" #include "JackMachPort.h"
#include <map> #include <map>


@@ -35,13 +35,13 @@ class JackEngineInterface;
\brief JackServerChannel using Mach IPC. \brief JackServerChannel using Mach IPC.
*/ */


class JackMachServerChannel : public JackServerChannelInterface, public JackRunnableInterface
class JackMachServerChannel : public JackRunnableInterface
{ {


private: private:


JackMachPortSet fServerPort; /*! Mach port to communicate with the server : from client to server */ JackMachPortSet fServerPort; /*! Mach port to communicate with the server : from client to server */
JackThread* fThread; /*! Thread to execute the event loop */
JackThread fThread; /*! Thread to execute the event loop */
JackServer* fServer; JackServer* fServer;
std::map<mach_port_t, int> fClientTable; std::map<mach_port_t, int> fClientTable;


@@ -50,7 +50,7 @@ class JackMachServerChannel : public JackServerChannelInterface, public JackRunn
public: public:


JackMachServerChannel(); JackMachServerChannel();
virtual ~JackMachServerChannel();
~JackMachServerChannel();


int Open(const char* server_name, JackServer* server); // Open the Server/Client connection int Open(const char* server_name, JackServer* server); // Open the Server/Client connection
void Close(); // Close the Server/Client connection void Close(); // Close the Server/Client connection


+ 1
- 3
macosx/JackMachServerNotifyChannel.h View File

@@ -30,7 +30,7 @@ namespace Jack
\brief JackServerNotifyChannel using Mach IPC. \brief JackServerNotifyChannel using Mach IPC.
*/ */


class JackMachServerNotifyChannel : public JackServerNotifyChannelInterface
class JackMachServerNotifyChannel
{ {


private: private:
@@ -41,8 +41,6 @@ class JackMachServerNotifyChannel : public JackServerNotifyChannelInterface


JackMachServerNotifyChannel() JackMachServerNotifyChannel()
{} {}
virtual ~JackMachServerNotifyChannel()
{}


int Open(const char* server_name); // Open the Server/Client connection int Open(const char* server_name); // Open the Server/Client connection
void Close(); // Close the Server/Client connection void Close(); // Close the Server/Client connection


+ 5
- 0
macosx/JackMachThread.cpp View File

@@ -164,6 +164,11 @@ int JackMachThread::AcquireRealTime()


return (fThread) ? AcquireRealTimeImp(fThread, fPeriod, fComputation, fConstraint) : -1; return (fThread) ? AcquireRealTimeImp(fThread, fPeriod, fComputation, fConstraint) : -1;
} }
int JackMachThread::AcquireRealTime(int priority)
{
fPriority = priority;
return AcquireRealTime();
}


int JackMachThread::AcquireRealTimeImp(pthread_t thread, UInt64 period, UInt64 computation, UInt64 constraint) int JackMachThread::AcquireRealTimeImp(pthread_t thread, UInt64 period, UInt64 computation, UInt64 constraint)
{ {


+ 2
- 7
macosx/JackMachThread.h View File

@@ -97,19 +97,14 @@ class JackMachThread : public JackPosixThread
: JackPosixThread(runnable), fPeriod(period), fComputation(computation), fConstraint(constraint) : JackPosixThread(runnable), fPeriod(period), fComputation(computation), fConstraint(constraint)
{} {}


JackMachThread(JackRunnableInterface* runnable)
: JackPosixThread(runnable), fPeriod(0), fComputation(0), fConstraint(0)
{}
JackMachThread(JackRunnableInterface* runnable, int cancellation)
JackMachThread(JackRunnableInterface* runnable, int cancellation = PTHREAD_CANCEL_ASYNCHRONOUS)
: JackPosixThread(runnable, cancellation), fPeriod(0), fComputation(0), fConstraint(0) : JackPosixThread(runnable, cancellation), fPeriod(0), fComputation(0), fConstraint(0)
{} {}


virtual ~JackMachThread()
{}

int Kill(); int Kill();


int AcquireRealTime(); int AcquireRealTime();
int AcquireRealTime(int priority);
int DropRealTime(); int DropRealTime();
void SetParams(UInt64 period, UInt64 computation, UInt64 constraint); void SetParams(UInt64 period, UInt64 computation, UInt64 constraint);
static int GetParams(UInt64* period, UInt64* computation, UInt64* constraint); static int GetParams(UInt64* period, UInt64* computation, UInt64* constraint);


+ 44
- 21
macosx/Jackdmp.xcodeproj/project.pbxproj View File

@@ -157,7 +157,6 @@
4B35C4690D4731D1000DE7AE /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; }; 4B35C4690D4731D1000DE7AE /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; };
4B35C46A0D4731D1000DE7AE /* JackMachClientChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB29AE08AF45FD00D450D4 /* JackMachClientChannel.cpp */; }; 4B35C46A0D4731D1000DE7AE /* JackMachClientChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB29AE08AF45FD00D450D4 /* JackMachClientChannel.cpp */; };
4B35C46D0D4731D1000DE7AE /* JackTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF773AA08B3414500149912 /* JackTime.c */; }; 4B35C46D0D4731D1000DE7AE /* JackTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF773AA08B3414500149912 /* JackTime.c */; };
4B35C46E0D4731D1000DE7AE /* JackGlobalsClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B123D3308B3954300540632 /* JackGlobalsClient.cpp */; };
4B35C4700D4731D1000DE7AE /* JackGlobals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2C28F908DAD01E00249230 /* JackGlobals.cpp */; }; 4B35C4700D4731D1000DE7AE /* JackGlobals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2C28F908DAD01E00249230 /* JackGlobals.cpp */; };
4B35C4720D4731D1000DE7AE /* ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003AB008E2B2BA0060EFDC /* ringbuffer.c */; }; 4B35C4720D4731D1000DE7AE /* ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003AB008E2B2BA0060EFDC /* ringbuffer.c */; };
4B35C4730D4731D1000DE7AE /* JackDebugClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B98AE000931D30C0091932A /* JackDebugClient.cpp */; }; 4B35C4730D4731D1000DE7AE /* JackDebugClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B98AE000931D30C0091932A /* JackDebugClient.cpp */; };
@@ -245,7 +244,6 @@
4B35C4DE0D4731D1000DE7AE /* JackExternalClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1F80834EFBD00C94B91 /* JackExternalClient.cpp */; }; 4B35C4DE0D4731D1000DE7AE /* JackExternalClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1F80834EFBD00C94B91 /* JackExternalClient.cpp */; };
4B35C4DF0D4731D1000DE7AE /* JackInternalClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1ED0834EF9200C94B91 /* JackInternalClient.cpp */; }; 4B35C4DF0D4731D1000DE7AE /* JackInternalClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1ED0834EF9200C94B91 /* JackInternalClient.cpp */; };
4B35C4E00D4731D1000DE7AE /* JackRPCClientUser.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B89B759076B731100D170DE /* JackRPCClientUser.c */; }; 4B35C4E00D4731D1000DE7AE /* JackRPCClientUser.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B89B759076B731100D170DE /* JackRPCClientUser.c */; };
4B35C4E10D4731D1000DE7AE /* JackGlobalsServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B123D3608B3954A00540632 /* JackGlobalsServer.cpp */; };
4B35C4E20D4731D1000DE7AE /* JackServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D2210834F05C00C94B91 /* JackServer.cpp */; }; 4B35C4E20D4731D1000DE7AE /* JackServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D2210834F05C00C94B91 /* JackServer.cpp */; };
4B35C4E60D4731D1000DE7AE /* JackMacEngineRPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */; }; 4B35C4E60D4731D1000DE7AE /* JackMacEngineRPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */; };
4B35C4E70D4731D1000DE7AE /* JackMachNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB298808AF450200D450D4 /* JackMachNotifyChannel.cpp */; }; 4B35C4E70D4731D1000DE7AE /* JackMachNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB298808AF450200D450D4 /* JackMachNotifyChannel.cpp */; };
@@ -368,7 +366,6 @@
4B699C36097D421600A18468 /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; }; 4B699C36097D421600A18468 /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; };
4B699C37097D421600A18468 /* JackMachClientChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB29AE08AF45FD00D450D4 /* JackMachClientChannel.cpp */; }; 4B699C37097D421600A18468 /* JackMachClientChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB29AE08AF45FD00D450D4 /* JackMachClientChannel.cpp */; };
4B699C3A097D421600A18468 /* JackTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF773AA08B3414500149912 /* JackTime.c */; }; 4B699C3A097D421600A18468 /* JackTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF773AA08B3414500149912 /* JackTime.c */; };
4B699C3B097D421600A18468 /* JackGlobalsClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B123D3308B3954300540632 /* JackGlobalsClient.cpp */; };
4B699C3D097D421600A18468 /* JackGlobals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2C28F908DAD01E00249230 /* JackGlobals.cpp */; }; 4B699C3D097D421600A18468 /* JackGlobals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2C28F908DAD01E00249230 /* JackGlobals.cpp */; };
4B699C3F097D421600A18468 /* ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003AB008E2B2BA0060EFDC /* ringbuffer.c */; }; 4B699C3F097D421600A18468 /* ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003AB008E2B2BA0060EFDC /* ringbuffer.c */; };
4B699C40097D421600A18468 /* JackDebugClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B98AE000931D30C0091932A /* JackDebugClient.cpp */; }; 4B699C40097D421600A18468 /* JackDebugClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B98AE000931D30C0091932A /* JackDebugClient.cpp */; };
@@ -432,7 +429,6 @@
4B699C99097D421600A18468 /* JackExternalClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1F80834EFBD00C94B91 /* JackExternalClient.cpp */; }; 4B699C99097D421600A18468 /* JackExternalClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1F80834EFBD00C94B91 /* JackExternalClient.cpp */; };
4B699C9A097D421600A18468 /* JackInternalClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1ED0834EF9200C94B91 /* JackInternalClient.cpp */; }; 4B699C9A097D421600A18468 /* JackInternalClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1ED0834EF9200C94B91 /* JackInternalClient.cpp */; };
4B699C9B097D421600A18468 /* JackRPCClientUser.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B89B759076B731100D170DE /* JackRPCClientUser.c */; }; 4B699C9B097D421600A18468 /* JackRPCClientUser.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B89B759076B731100D170DE /* JackRPCClientUser.c */; };
4B699C9C097D421600A18468 /* JackGlobalsServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B123D3608B3954A00540632 /* JackGlobalsServer.cpp */; };
4B699C9D097D421600A18468 /* JackServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D2210834F05C00C94B91 /* JackServer.cpp */; }; 4B699C9D097D421600A18468 /* JackServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D2210834F05C00C94B91 /* JackServer.cpp */; };
4B699CA1097D421600A18468 /* JackMacEngineRPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */; }; 4B699CA1097D421600A18468 /* JackMacEngineRPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */; };
4B699CA2097D421600A18468 /* JackMachNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB298808AF450200D450D4 /* JackMachNotifyChannel.cpp */; }; 4B699CA2097D421600A18468 /* JackMachNotifyChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB298808AF450200D450D4 /* JackMachNotifyChannel.cpp */; };
@@ -1001,8 +997,6 @@
4B0A28E60D52073D002EFF74 /* jack_thread_wait */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait; sourceTree = BUILT_PRODUCTS_DIR; }; 4B0A28E60D52073D002EFF74 /* jack_thread_wait */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait; sourceTree = BUILT_PRODUCTS_DIR; };
4B0A28EC0D520852002EFF74 /* tw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tw.c; path = "../example-clients/tw.c"; sourceTree = SOURCE_ROOT; }; 4B0A28EC0D520852002EFF74 /* tw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tw.c; path = "../example-clients/tw.c"; sourceTree = SOURCE_ROOT; };
4B0A292D0D52108E002EFF74 /* jack_thread_wait */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait; sourceTree = BUILT_PRODUCTS_DIR; }; 4B0A292D0D52108E002EFF74 /* jack_thread_wait */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait; sourceTree = BUILT_PRODUCTS_DIR; };
4B123D3308B3954300540632 /* JackGlobalsClient.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackGlobalsClient.cpp; path = ../common/JackGlobalsClient.cpp; sourceTree = SOURCE_ROOT; };
4B123D3608B3954A00540632 /* JackGlobalsServer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackGlobalsServer.cpp; path = ../common/JackGlobalsServer.cpp; sourceTree = SOURCE_ROOT; };
4B2C28F908DAD01E00249230 /* JackGlobals.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackGlobals.cpp; path = ../common/JackGlobals.cpp; sourceTree = SOURCE_ROOT; }; 4B2C28F908DAD01E00249230 /* JackGlobals.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackGlobals.cpp; path = ../common/JackGlobals.cpp; sourceTree = SOURCE_ROOT; };
4B35C4250D4731D1000DE7AE /* jackdmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jackdmp; sourceTree = BUILT_PRODUCTS_DIR; }; 4B35C4250D4731D1000DE7AE /* jackdmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jackdmp; sourceTree = BUILT_PRODUCTS_DIR; };
4B35C4830D4731D1000DE7AE /* Jackmp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackmp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4B35C4830D4731D1000DE7AE /* Jackmp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Jackmp.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1140,6 +1134,13 @@
4BC3988908B3CF6C00B6F371 /* JackDummyDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackDummyDriver.cpp; path = ../common/JackDummyDriver.cpp; sourceTree = SOURCE_ROOT; }; 4BC3988908B3CF6C00B6F371 /* JackDummyDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackDummyDriver.cpp; path = ../common/JackDummyDriver.cpp; sourceTree = SOURCE_ROOT; };
4BC3988A08B3CF6C00B6F371 /* JackDummyDriver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackDummyDriver.h; path = ../common/JackDummyDriver.h; sourceTree = SOURCE_ROOT; }; 4BC3988A08B3CF6C00B6F371 /* JackDummyDriver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackDummyDriver.h; path = ../common/JackDummyDriver.h; sourceTree = SOURCE_ROOT; };
4BC8326D0DF42C7D00DD1C93 /* JackMutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackMutex.h; path = ../common/JackMutex.h; sourceTree = SOURCE_ROOT; }; 4BC8326D0DF42C7D00DD1C93 /* JackMutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackMutex.h; path = ../common/JackMutex.h; sourceTree = SOURCE_ROOT; };
4BC834940DF4632F00DD1C93 /* JackPlatformClientChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackPlatformClientChannel.h; path = ../common/JackPlatformClientChannel.h; sourceTree = SOURCE_ROOT; };
4BC834950DF4632F00DD1C93 /* JackPlatformNotifyChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackPlatformNotifyChannel.h; path = ../common/JackPlatformNotifyChannel.h; sourceTree = SOURCE_ROOT; };
4BC834960DF4632F00DD1C93 /* JackPlatformProcessSync.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackPlatformProcessSync.h; path = ../common/JackPlatformProcessSync.h; sourceTree = SOURCE_ROOT; };
4BC834970DF4632F00DD1C93 /* JackPlatformServerChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackPlatformServerChannel.h; path = ../common/JackPlatformServerChannel.h; sourceTree = SOURCE_ROOT; };
4BC834980DF4632F00DD1C93 /* JackPlatformServerNotifyChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackPlatformServerNotifyChannel.h; path = ../common/JackPlatformServerNotifyChannel.h; sourceTree = SOURCE_ROOT; };
4BC834990DF4632F00DD1C93 /* JackPlatformSynchro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackPlatformSynchro.h; path = ../common/JackPlatformSynchro.h; sourceTree = SOURCE_ROOT; };
4BC8349A0DF4632F00DD1C93 /* JackPlatformThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackPlatformThread.h; path = ../common/JackPlatformThread.h; sourceTree = SOURCE_ROOT; };
4BCC87950D57168300A7FEB1 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = "<absolute>"; }; 4BCC87950D57168300A7FEB1 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = "<absolute>"; };
4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackTransportEngine.h; path = ../common/JackTransportEngine.h; sourceTree = SOURCE_ROOT; }; 4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackTransportEngine.h; path = ../common/JackTransportEngine.h; sourceTree = SOURCE_ROOT; };
4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackTransportEngine.cpp; path = ../common/JackTransportEngine.cpp; sourceTree = SOURCE_ROOT; }; 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackTransportEngine.cpp; path = ../common/JackTransportEngine.cpp; sourceTree = SOURCE_ROOT; };
@@ -1926,8 +1927,6 @@
4B66A8580934964500A89560 /* JackConstants.h */, 4B66A8580934964500A89560 /* JackConstants.h */,
4BFB73F608AD291A00DB99B8 /* JackGlobals.h */, 4BFB73F608AD291A00DB99B8 /* JackGlobals.h */,
4B2C28F908DAD01E00249230 /* JackGlobals.cpp */, 4B2C28F908DAD01E00249230 /* JackGlobals.cpp */,
4B123D3308B3954300540632 /* JackGlobalsClient.cpp */,
4B123D3608B3954A00540632 /* JackGlobalsServer.cpp */,
4BF8D2190834F03D00C94B91 /* JackEngineControl.h */, 4BF8D2190834F03D00C94B91 /* JackEngineControl.h */,
4B6F7AEC0CD0CDBD00F48A9D /* JackEngineControl.cpp */, 4B6F7AEC0CD0CDBD00F48A9D /* JackEngineControl.cpp */,
4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */, 4BD4B4D409BACD9600750C0F /* JackTransportEngine.h */,
@@ -1945,6 +1944,7 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
4BF8D19F0834EE9E00C94B91 /* JackThread.h */, 4BF8D19F0834EE9E00C94B91 /* JackThread.h */,
4BC8349A0DF4632F00DD1C93 /* JackPlatformThread.h */,
4BF8D1970834EE9700C94B91 /* JackPosixThread.h */, 4BF8D1970834EE9700C94B91 /* JackPosixThread.h */,
4BF8D1980834EE9700C94B91 /* JackPosixThread.cpp */, 4BF8D1980834EE9700C94B91 /* JackPosixThread.cpp */,
4BFB741F08AD2B9900DB99B8 /* JackMachThread.h */, 4BFB741F08AD2B9900DB99B8 /* JackMachThread.h */,
@@ -1969,17 +1969,19 @@
4BA3874007947A46008D8992 /* Synchro */ = { 4BA3874007947A46008D8992 /* Synchro */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
4BC8326D0DF42C7D00DD1C93 /* JackMutex.h */,
4BD561C708EEB910006BBC2A /* JackSynchro.h */,
4BC834960DF4632F00DD1C93 /* JackPlatformProcessSync.h */,
4BC834990DF4632F00DD1C93 /* JackPlatformSynchro.h */,
4B02069D0DC0BAB400319AF1 /* JackProcessSync.cpp */, 4B02069D0DC0BAB400319AF1 /* JackProcessSync.cpp */,
4BF8D1A70834EEB400C94B91 /* JackActivationCount.h */, 4BF8D1A70834EEB400C94B91 /* JackActivationCount.h */,
4BF8D1A80834EEB400C94B91 /* JackActivationCount.cpp */, 4BF8D1A80834EEB400C94B91 /* JackActivationCount.cpp */,
4BD561C708EEB910006BBC2A /* JackSynchro.h */,
4B56881008B5C8620022B32D /* JackFifo.h */, 4B56881008B5C8620022B32D /* JackFifo.h */,
4B56880F08B5C8620022B32D /* JackFifo.cpp */, 4B56880F08B5C8620022B32D /* JackFifo.cpp */,
4BF6C1D608ACE64C001E2013 /* JackMachSemaphore.h */, 4BF6C1D608ACE64C001E2013 /* JackMachSemaphore.h */,
4BF6C1D508ACE64C001E2013 /* JackMachSemaphore.cpp */, 4BF6C1D508ACE64C001E2013 /* JackMachSemaphore.cpp */,
4BEE0B2D08ACBB9F00D22B43 /* JackPosixSemaphore.h */, 4BEE0B2D08ACBB9F00D22B43 /* JackPosixSemaphore.h */,
4BEE0B2C08ACBB9F00D22B43 /* JackPosixSemaphore.cpp */, 4BEE0B2C08ACBB9F00D22B43 /* JackPosixSemaphore.cpp */,
4BC8326D0DF42C7D00DD1C93 /* JackMutex.h */,
); );
name = Synchro; name = Synchro;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -2055,9 +2057,13 @@
4BA550FF05E2423600569492 /* Channels */ = { 4BA550FF05E2423600569492 /* Channels */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
4BB371D40C1AD85A0050C1E4 /* JackNotification.h */,
4BF8D1AF0834EEC400C94B91 /* JackChannel.h */, 4BF8D1AF0834EEC400C94B91 /* JackChannel.h */,
4BB371D40C1AD85A0050C1E4 /* JackNotification.h */,
4BC834970DF4632F00DD1C93 /* JackPlatformServerChannel.h */,
4BC834980DF4632F00DD1C93 /* JackPlatformServerNotifyChannel.h */,
4BF8D1B30834EED500C94B91 /* JackInternalClientChannel.h */, 4BF8D1B30834EED500C94B91 /* JackInternalClientChannel.h */,
4BC834940DF4632F00DD1C93 /* JackPlatformClientChannel.h */,
4BC834950DF4632F00DD1C93 /* JackPlatformNotifyChannel.h */,
4BFB299908AF452300D450D4 /* Socket */, 4BFB299908AF452300D450D4 /* Socket */,
4BFB299808AF451200D450D4 /* Mach */, 4BFB299808AF451200D450D4 /* Mach */,
); );
@@ -4548,7 +4554,6 @@
4B35C4690D4731D1000DE7AE /* JackMachThread.cpp in Sources */, 4B35C4690D4731D1000DE7AE /* JackMachThread.cpp in Sources */,
4B35C46A0D4731D1000DE7AE /* JackMachClientChannel.cpp in Sources */, 4B35C46A0D4731D1000DE7AE /* JackMachClientChannel.cpp in Sources */,
4B35C46D0D4731D1000DE7AE /* JackTime.c in Sources */, 4B35C46D0D4731D1000DE7AE /* JackTime.c in Sources */,
4B35C46E0D4731D1000DE7AE /* JackGlobalsClient.cpp in Sources */,
4B35C4700D4731D1000DE7AE /* JackGlobals.cpp in Sources */, 4B35C4700D4731D1000DE7AE /* JackGlobals.cpp in Sources */,
4B35C4720D4731D1000DE7AE /* ringbuffer.c in Sources */, 4B35C4720D4731D1000DE7AE /* ringbuffer.c in Sources */,
4B35C4730D4731D1000DE7AE /* JackDebugClient.cpp in Sources */, 4B35C4730D4731D1000DE7AE /* JackDebugClient.cpp in Sources */,
@@ -4596,7 +4601,6 @@
4B35C4DE0D4731D1000DE7AE /* JackExternalClient.cpp in Sources */, 4B35C4DE0D4731D1000DE7AE /* JackExternalClient.cpp in Sources */,
4B35C4DF0D4731D1000DE7AE /* JackInternalClient.cpp in Sources */, 4B35C4DF0D4731D1000DE7AE /* JackInternalClient.cpp in Sources */,
4B35C4E00D4731D1000DE7AE /* JackRPCClientUser.c in Sources */, 4B35C4E00D4731D1000DE7AE /* JackRPCClientUser.c in Sources */,
4B35C4E10D4731D1000DE7AE /* JackGlobalsServer.cpp in Sources */,
4B35C4E20D4731D1000DE7AE /* JackServer.cpp in Sources */, 4B35C4E20D4731D1000DE7AE /* JackServer.cpp in Sources */,
4B35C4E60D4731D1000DE7AE /* JackMacEngineRPC.cpp in Sources */, 4B35C4E60D4731D1000DE7AE /* JackMacEngineRPC.cpp in Sources */,
4B35C4E70D4731D1000DE7AE /* JackMachNotifyChannel.cpp in Sources */, 4B35C4E70D4731D1000DE7AE /* JackMachNotifyChannel.cpp in Sources */,
@@ -4918,7 +4922,6 @@
4B699C36097D421600A18468 /* JackMachThread.cpp in Sources */, 4B699C36097D421600A18468 /* JackMachThread.cpp in Sources */,
4B699C37097D421600A18468 /* JackMachClientChannel.cpp in Sources */, 4B699C37097D421600A18468 /* JackMachClientChannel.cpp in Sources */,
4B699C3A097D421600A18468 /* JackTime.c in Sources */, 4B699C3A097D421600A18468 /* JackTime.c in Sources */,
4B699C3B097D421600A18468 /* JackGlobalsClient.cpp in Sources */,
4B699C3D097D421600A18468 /* JackGlobals.cpp in Sources */, 4B699C3D097D421600A18468 /* JackGlobals.cpp in Sources */,
4B699C3F097D421600A18468 /* ringbuffer.c in Sources */, 4B699C3F097D421600A18468 /* ringbuffer.c in Sources */,
4B699C40097D421600A18468 /* JackDebugClient.cpp in Sources */, 4B699C40097D421600A18468 /* JackDebugClient.cpp in Sources */,
@@ -4966,7 +4969,6 @@
4B699C99097D421600A18468 /* JackExternalClient.cpp in Sources */, 4B699C99097D421600A18468 /* JackExternalClient.cpp in Sources */,
4B699C9A097D421600A18468 /* JackInternalClient.cpp in Sources */, 4B699C9A097D421600A18468 /* JackInternalClient.cpp in Sources */,
4B699C9B097D421600A18468 /* JackRPCClientUser.c in Sources */, 4B699C9B097D421600A18468 /* JackRPCClientUser.c in Sources */,
4B699C9C097D421600A18468 /* JackGlobalsServer.cpp in Sources */,
4B699C9D097D421600A18468 /* JackServer.cpp in Sources */, 4B699C9D097D421600A18468 /* JackServer.cpp in Sources */,
4B699CA1097D421600A18468 /* JackMacEngineRPC.cpp in Sources */, 4B699CA1097D421600A18468 /* JackMacEngineRPC.cpp in Sources */,
4B699CA2097D421600A18468 /* JackMachNotifyChannel.cpp in Sources */, 4B699CA2097D421600A18468 /* JackMachNotifyChannel.cpp in Sources */,
@@ -11093,7 +11095,9 @@
GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
HEADER_SEARCH_PATHS = ../common;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
CoreAudio, CoreAudio,
@@ -11130,8 +11134,10 @@
); );
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\"";
GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO;
HEADER_SEARCH_PATHS = ../common;
MACOSX_DEPLOYMENT_TARGET = 10.4; MACOSX_DEPLOYMENT_TARGET = 10.4;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
CoreAudio, CoreAudio,
@@ -11166,7 +11172,9 @@
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
); );
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\"";
HEADER_SEARCH_PATHS = ../common;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
AudioToolBox, AudioToolBox,
@@ -11207,7 +11215,9 @@
GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
HEADER_SEARCH_PATHS = ../common;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
CoreAudio, CoreAudio,
@@ -11244,8 +11254,10 @@
); );
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\"";
GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO;
HEADER_SEARCH_PATHS = ../common;
MACOSX_DEPLOYMENT_TARGET = 10.4; MACOSX_DEPLOYMENT_TARGET = 10.4;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
CoreAudio, CoreAudio,
@@ -11280,7 +11292,9 @@
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
); );
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\"";
HEADER_SEARCH_PATHS = ../common;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
AudioToolBox, AudioToolBox,
@@ -11321,7 +11335,9 @@
GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 0; GCC_OPTIMIZATION_LEVEL = 0;
HEADER_SEARCH_PATHS = ../common;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
CoreAudio, CoreAudio,
@@ -11358,8 +11374,10 @@
); );
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\"";
GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO;
HEADER_SEARCH_PATHS = ../common;
MACOSX_DEPLOYMENT_TARGET = 10.4; MACOSX_DEPLOYMENT_TARGET = 10.4;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
CoreAudio, CoreAudio,
@@ -11394,7 +11412,9 @@
"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
); );
FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\"";
HEADER_SEARCH_PATHS = ../common;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
AudioToolBox, AudioToolBox,
@@ -11441,7 +11461,7 @@
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0"; OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
Jackservermp, Jackservermp,
@@ -11486,7 +11506,7 @@
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
MACOSX_DEPLOYMENT_TARGET = 10.4; MACOSX_DEPLOYMENT_TARGET = 10.4;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
Jackservermp, Jackservermp,
@@ -11528,7 +11548,7 @@
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
Jackdmp, Jackdmp,
@@ -11576,6 +11596,7 @@
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0"; OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
Jackservermp, Jackservermp,
@@ -11619,6 +11640,7 @@
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
MACOSX_DEPLOYMENT_TARGET = 10.4; MACOSX_DEPLOYMENT_TARGET = 10.4;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
Jackservermp, Jackservermp,
@@ -11659,6 +11681,7 @@
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
"-framework", "-framework",
Jackdmp, Jackdmp,
@@ -11726,7 +11749,7 @@
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OPTIMIZATION_CFLAGS = "-O0"; OPTIMIZATION_CFLAGS = "-O0";
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
libportaudio.a, libportaudio.a,
"-framework", "-framework",
@@ -11775,7 +11798,7 @@
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
MACOSX_DEPLOYMENT_TARGET = 10.4; MACOSX_DEPLOYMENT_TARGET = 10.4;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
libportaudio.a, libportaudio.a,
"-framework", "-framework",
@@ -11821,7 +11844,7 @@
LIBRARY_STYLE = DYNAMIC; LIBRARY_STYLE = DYNAMIC;
MACH_O_TYPE = mh_dylib; MACH_O_TYPE = mh_dylib;
OTHER_CFLAGS = ""; OTHER_CFLAGS = "";
OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
OTHER_CPLUSPLUSFLAGS = "-DMACH_RPC_MACH_SEMA";
OTHER_LDFLAGS = ( OTHER_LDFLAGS = (
libportaudio.a, libportaudio.a,
"-framework", "-framework",


+ 9
- 9
tests/testSem.cpp View File

@@ -24,13 +24,13 @@


#ifdef __APPLE__ #ifdef __APPLE__
#include "JackMachSemaphore.h" #include "JackMachSemaphore.h"
#include "JackMachThread.h"
#endif #endif


#include "JackPosixThread.h"
#include "JackPosixSemaphore.h" #include "JackPosixSemaphore.h"
#include "JackFifo.h" #include "JackFifo.h"


#include "JackPlatformThread.h"

#define ITER 500000 #define ITER 500000


using namespace Jack; using namespace Jack;
@@ -38,8 +38,8 @@ using namespace Jack;
struct ServerThread : public JackRunnableInterface { struct ServerThread : public JackRunnableInterface {


JackThread* fThread; JackThread* fThread;
JackSynchro* fServerSem;
JackSynchro* fClientSem;
detail::JackSynchro* fServerSem;
detail::JackSynchro* fClientSem;
ServerThread() ServerThread()
{ {
@@ -72,8 +72,8 @@ struct ServerThread : public JackRunnableInterface {
struct ClientThread : public JackRunnableInterface { struct ClientThread : public JackRunnableInterface {


JackThread* fThread; JackThread* fThread;
JackSynchro* fServerSem;
JackSynchro* fClientSem;
detail::JackSynchro* fServerSem;
detail::JackSynchro* fClientSem;
ClientThread() ClientThread()
{ {
@@ -110,7 +110,7 @@ struct ClientThread : public JackRunnableInterface {
}; };


void server(JackSynchro* sem)
void server(detail::JackSynchro* sem)
{ {
char c; char c;
printf("server\n"); printf("server\n");
@@ -137,7 +137,7 @@ void server(JackSynchro* sem)
} }
} }


void client(JackSynchro* sem)
void client(detail::JackSynchro* sem)
{ {
char c; char c;
printf("client\n"); printf("client\n");
@@ -168,7 +168,7 @@ int main (int argc, char * const argv[])
char c; char c;
ServerThread* serverthread = NULL; ServerThread* serverthread = NULL;
ClientThread* clientthread = NULL; ClientThread* clientthread = NULL;
JackSynchro* sem1 = NULL;
detail::JackSynchro* sem1 = NULL;
if (strcmp(argv[1],"-s") == 0) { if (strcmp(argv[1],"-s") == 0) {
printf("Posix semaphore\n"); printf("Posix semaphore\n");


+ 7
- 8
tests/testSynchroClient.cpp View File

@@ -36,20 +36,19 @@


#ifdef __APPLE__ #ifdef __APPLE__
#include "JackMachSemaphore.h" #include "JackMachSemaphore.h"
#include "JackMachThread.h"
#endif #endif


#ifdef WIN32 #ifdef WIN32
#include "JackWinThread.h"
#include "JackWinEvent.h" #include "JackWinEvent.h"
#endif #endif


#ifdef linux #ifdef linux
#include "JackPosixThread.h"
#include "JackPosixSemaphore.h" #include "JackPosixSemaphore.h"
#include "JackFifo.h" #include "JackFifo.h"
#endif #endif


#include "JackPlatformThread.h"

#define ITER 1000 #define ITER 1000


#define SERVER "serveur3" #define SERVER "serveur3"
@@ -62,12 +61,12 @@ class Test2 : public JackRunnableInterface


private: private:


JackSynchro* fSynchro1;
JackSynchro* fSynchro2;
detail::JackSynchro* fSynchro1;
detail::JackSynchro* fSynchro2;


public: public:


Test2(JackSynchro* synchro1, JackSynchro* synchro2)
Test2(detail::JackSynchro* synchro1, detail::JackSynchro* synchro2)
: fSynchro1(synchro1), fSynchro2(synchro2) : fSynchro1(synchro1), fSynchro2(synchro2)
{} {}


@@ -89,8 +88,8 @@ class Test2 : public JackRunnableInterface
int main(int ac, char *av []) int main(int ac, char *av [])
{ {
Test2* obj; Test2* obj;
JackSynchro* sem1 = NULL;
JackSynchro* sem2 = NULL;
detail::JackSynchro* sem1 = NULL;
detail::JackSynchro* sem2 = NULL;
JackThread* thread; JackThread* thread;


printf("Test of synchronization primitives : client side\n"); printf("Test of synchronization primitives : client side\n");


+ 7
- 8
tests/testSynchroServer.cpp View File

@@ -36,20 +36,19 @@


#ifdef __APPLE__ #ifdef __APPLE__
#include "JackMachSemaphore.h" #include "JackMachSemaphore.h"
#include "JackMachThread.h"
#endif #endif


#ifdef WIN32 #ifdef WIN32
#include "JackWinThread.h"
#include "JackWinEvent.h" #include "JackWinEvent.h"
#endif #endif


#ifdef linux #ifdef linux
#include "JackPosixThread.h"
#include "JackPosixSemaphore.h" #include "JackPosixSemaphore.h"
#include "JackFifo.h" #include "JackFifo.h"
#endif #endif


#include "JackPlatformThread.h"

#define ITER 1000 #define ITER 1000


#define SERVER "serveur3" #define SERVER "serveur3"
@@ -91,12 +90,12 @@ class Test1 : public JackRunnableInterface


private: private:


JackSynchro* fSynchro1;
JackSynchro* fSynchro2;
detail::JackSynchro* fSynchro1;
detail::JackSynchro* fSynchro2;


public: public:


Test1(JackSynchro* synchro1, JackSynchro* synchro2)
Test1(detail::JackSynchro* synchro1, detail::JackSynchro* synchro2)
: fSynchro1(synchro1), fSynchro2(synchro2) : fSynchro1(synchro1), fSynchro2(synchro2)
{} {}


@@ -138,8 +137,8 @@ class Test1 : public JackRunnableInterface
int main(int ac, char *av []) int main(int ac, char *av [])
{ {
Test1* obj; Test1* obj;
JackSynchro* sem1 = NULL;
JackSynchro* sem2 = NULL;
detail::JackSynchro* sem1 = NULL;
detail::JackSynchro* sem2 = NULL;
JackThread* thread; JackThread* thread;


#ifdef WIN32 #ifdef WIN32


+ 66
- 86
tests/testSynchroServerClient.cpp View File

@@ -6,7 +6,7 @@
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2 of the License, or
(at your option) any later version. (at your option) any later version.


This program is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
@@ -36,25 +36,26 @@


#ifdef __APPLE__ #ifdef __APPLE__
#include "JackMachSemaphore.h" #include "JackMachSemaphore.h"
#include "JackMachThread.h"
#endif #endif


#ifdef WIN32 #ifdef WIN32
#include "JackWinThread.h"
#include "JackWinEvent.h" #include "JackWinEvent.h"
#endif #endif


#ifdef linux #ifdef linux
#include "JackPosixThread.h"
#include "JackPosixSemaphore.h" #include "JackPosixSemaphore.h"
#include "JackFifo.h" #include "JackFifo.h"
#endif #endif


#include "JackPlatformThread.h"

#define ITER 100000 #define ITER 100000


#define SERVER "serveur1" #define SERVER "serveur1"
#define CLIENT "client1" #define CLIENT "client1"


#include "JackPlatformSynchro.h"

using namespace Jack; using namespace Jack;


#ifdef WIN32 #ifdef WIN32
@@ -86,17 +87,18 @@ static BOOL overhead (long * overhead)


#endif #endif


template <typename sync_type>
class Test1 : public JackRunnableInterface class Test1 : public JackRunnableInterface
{ {


private: private:


JackSynchro* fSynchro1;
JackSynchro* fSynchro2;
sync_type* fSynchro1;
sync_type* fSynchro2;


public: public:


Test1(JackSynchro* synchro1, JackSynchro* synchro2)
Test1(sync_type* synchro1, sync_type* synchro2)
: fSynchro1(synchro1), fSynchro2(synchro2) : fSynchro1(synchro1), fSynchro2(synchro2)
{} {}


@@ -136,17 +138,18 @@ class Test1 : public JackRunnableInterface


}; };


template <typename sync_type>
class Test2 : public JackRunnableInterface class Test2 : public JackRunnableInterface
{ {


private: private:


JackSynchro* fSynchro1;
JackSynchro* fSynchro2;
sync_type* fSynchro1;
sync_type* fSynchro2;


public: public:


Test2(JackSynchro* synchro1, JackSynchro* synchro2)
Test2(sync_type* synchro1, sync_type* synchro2)
: fSynchro1(synchro1), fSynchro2(synchro2) : fSynchro1(synchro1), fSynchro2(synchro2)
{} {}


@@ -162,17 +165,59 @@ class Test2 : public JackRunnableInterface


}; };


int main(int ac, char *av [])
template <typename sync_type>
void run_tests(void)
{ {
Test1* obj1;
Test2* obj2;
JackSynchro* sem1 = NULL;
JackSynchro* sem2 = NULL;
JackSynchro* sem3 = NULL;
JackSynchro* sem4 = NULL;
sync_type sem1, sem2, sem3, sem4;

sem1.Allocate(SERVER, "default", 0);
sem2.Allocate(CLIENT, "default", 0);
sem3.ConnectOutput(SERVER, "default");
sem4.ConnectInput(CLIENT, "default");

Test1<sync_type> obj1(&sem1, &sem2);
Test2<sync_type> obj2(&sem3, &sem4);

JackThread* thread1; JackThread* thread1;
JackThread* thread2; JackThread* thread2;


#ifdef __APPLE__
thread1 = new JackMachThread(&obj1, 10000 * 1000, 500 * 1000, 10000 * 1000);
thread2 = new JackMachThread(&obj2, 10000 * 1000, 500 * 1000, 10000 * 1000);
#endif

#ifdef WIN32
thread1 = new JackWinThread(&obj1);
thread2 = new JackWinThread(&obj2);
#endif

#ifdef linux
thread1 = new JackPosixThread(&obj1, false, 50, PTHREAD_CANCEL_DEFERRED);
thread2 = new JackPosixThread(&obj2, false, 50, PTHREAD_CANCEL_DEFERRED);
#endif
thread1->Start();
thread2->Start();
//thread1->AcquireRealTime();
//thread2->AcquireRealTime();
#ifdef WIN32
Sleep(30 * 1000);
#else
sleep (30);
#endif

thread1->Stop();
thread2->Stop();
sem3.Disconnect();
sem4.Disconnect();
sem1.Destroy();
sem2.Destroy();

delete thread1;
delete thread2;
}

int main(int ac, char *av [])
{
#ifdef WIN32 #ifdef WIN32
if (!QueryPerformanceFrequency (&gFreq) || if (!QueryPerformanceFrequency (&gFreq) ||
!overhead (&gQueryOverhead)) { !overhead (&gQueryOverhead)) {
@@ -189,93 +234,28 @@ int main(int ac, char *av [])
#ifdef __APPLE__ #ifdef __APPLE__
if (strcmp(av[1], "-m") == 0) { if (strcmp(av[1], "-m") == 0) {
printf("Mach semaphore\n"); printf("Mach semaphore\n");
sem1 = new JackMachSemaphore();
sem2 = new JackMachSemaphore();
sem3 = new JackMachSemaphore();
sem4 = new JackMachSemaphore();
run_tests<JackMachSemaphore>();
} }
#endif #endif


#ifdef WIN32 #ifdef WIN32
if (strcmp(av[1], "-e") == 0) { if (strcmp(av[1], "-e") == 0) {
printf("Win event\n"); printf("Win event\n");
sem1 = new JackWinEvent();
sem2 = new JackWinEvent();
sem3 = new JackWinEvent();
sem4 = new JackWinEvent();
run_tests<JackWinEvent>();
} }
#endif #endif


#ifdef linux #ifdef linux
if (strcmp(av[1], "-s") == 0) { if (strcmp(av[1], "-s") == 0) {
printf("Posix semaphore\n"); printf("Posix semaphore\n");
sem1 = new JackPosixSemaphore();
sem2 = new JackPosixSemaphore();
sem3 = new JackPosixSemaphore();
sem4 = new JackPosixSemaphore();
run_tests<JackPosixSemaphore>();
} }


if (strcmp(av[1], "-f") == 0) { if (strcmp(av[1], "-f") == 0) {
printf("Fifo\n"); printf("Fifo\n");
sem1 = new JackFifo();
sem2 = new JackFifo();
sem3 = new JackFifo();
sem4 = new JackFifo();
run_tests<JackFifo>();
} }


#endif #endif

if (!sem1->Allocate(SERVER, "default", 0))
return -1;
if (!sem2->Allocate(CLIENT, "default", 0))
return -1;
if (sem3->ConnectOutput(SERVER, "default"))
return -1;
if (sem4->ConnectInput(CLIENT, "default"))
return -1;

// run test in RT thread
obj1 = new Test1(sem1, sem2);
obj2 = new Test2(sem3, sem4);

#ifdef __APPLE__
thread1 = new JackMachThread(obj1, 10000 * 1000, 500 * 1000, 10000 * 1000);
thread2 = new JackMachThread(obj2, 10000 * 1000, 500 * 1000, 10000 * 1000);
#endif

#ifdef WIN32
thread1 = new JackWinThread(obj1);
thread2 = new JackWinThread(obj2);
#endif

#ifdef linux
thread1 = new JackPosixThread(obj1, false, 50, PTHREAD_CANCEL_DEFERRED);
thread2 = new JackPosixThread(obj2, false, 50, PTHREAD_CANCEL_DEFERRED);
#endif

thread1->Start();
thread2->Start();
//thread1->AcquireRealTime();
//thread2->AcquireRealTime();
#ifdef WIN32
Sleep(30 * 1000);
#else
sleep (30);
#endif

thread1->Stop();
thread2->Stop();
sem3->Disconnect();
sem4->Disconnect();
sem1->Destroy();
sem2->Destroy();
delete obj1;
delete obj2;
delete thread1;
delete thread2;
delete sem1;
delete sem2;
delete sem3;
delete sem4;
return 0; return 0;
} }

+ 1
- 1
windows/JackPortAudioDriver.cpp View File

@@ -574,7 +574,7 @@ extern "C"
return desc; return desc;
} }


EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro** table, const JSList* params) {
EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro* table, const JSList* params) {
jack_nframes_t srate = 44100; jack_nframes_t srate = 44100;
jack_nframes_t frames_per_interrupt = 512; jack_nframes_t frames_per_interrupt = 512;
int capture = FALSE; int capture = FALSE;


+ 1
- 1
windows/JackPortAudioDriver.h View File

@@ -53,7 +53,7 @@ class JackPortAudioDriver : public JackAudioDriver


public: public:


JackPortAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table)
JackPortAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro* table)
: JackAudioDriver(name, alias, engine, table), fStream(NULL), fInputBuffer(NULL), fOutputBuffer(NULL), : JackAudioDriver(name, alias, engine, table), fStream(NULL), fInputBuffer(NULL), fOutputBuffer(NULL),
fInputDevice(paNoDevice), fOutputDevice(paNoDevice) fInputDevice(paNoDevice), fOutputDevice(paNoDevice)
{} {}


+ 5
- 8
windows/JackWinNamedPipeClientChannel.cpp View File

@@ -29,16 +29,13 @@ Copyright (C) 2004-2006 Grame
namespace Jack namespace Jack
{ {


JackWinNamedPipeClientChannel::JackWinNamedPipeClientChannel()
JackWinNamedPipeClientChannel::JackWinNamedPipeClientChannel():fThread(this)
{ {
fThread = JackGlobals::MakeThread(this);
fClient = NULL; fClient = NULL;
} }


JackWinNamedPipeClientChannel::~JackWinNamedPipeClientChannel() JackWinNamedPipeClientChannel::~JackWinNamedPipeClientChannel()
{
delete fThread;
}
{}


int JackWinNamedPipeClientChannel::ServerCheck(const char* server_name) int JackWinNamedPipeClientChannel::ServerCheck(const char* server_name)
{ {
@@ -98,7 +95,7 @@ void JackWinNamedPipeClientChannel::Close()
fRequestPipe.Close(); fRequestPipe.Close();
fNotificationListenPipe.Close(); fNotificationListenPipe.Close();
// Here the thread will correctly stop when the pipe are closed // Here the thread will correctly stop when the pipe are closed
fThread->Stop();
fThread.Stop();
} }


int JackWinNamedPipeClientChannel::Start() int JackWinNamedPipeClientChannel::Start()
@@ -107,7 +104,7 @@ int JackWinNamedPipeClientChannel::Start()
/* /*
To be sure notification thread is started before ClientOpen is called. To be sure notification thread is started before ClientOpen is called.
*/ */
if (fThread->StartSync() != 0) {
if (fThread.StartSync() != 0) {
jack_error("Cannot start Jack client listener"); jack_error("Cannot start Jack client listener");
return -1; return -1;
} else { } else {
@@ -118,7 +115,7 @@ int JackWinNamedPipeClientChannel::Start()
void JackWinNamedPipeClientChannel::Stop() void JackWinNamedPipeClientChannel::Stop()
{ {
jack_log("JackWinNamedPipeClientChannel::Stop"); jack_log("JackWinNamedPipeClientChannel::Stop");
fThread->Kill(); // Unsafe on WIN32... TODO : solve WIN32 thread Kill issue
fThread.Kill(); // Unsafe on WIN32... TODO : solve WIN32 thread Kill issue
} }


void JackWinNamedPipeClientChannel::ServerSyncCall(JackRequest* req, JackResult* res, int* result) void JackWinNamedPipeClientChannel::ServerSyncCall(JackRequest* req, JackResult* res, int* result)


+ 5
- 3
windows/JackWinNamedPipeClientChannel.h View File

@@ -22,7 +22,7 @@ Copyright (C) 2004-2006 Grame


#include "JackChannel.h" #include "JackChannel.h"
#include "JackWinNamedPipe.h" #include "JackWinNamedPipe.h"
#include "JackThread.h"
#include "JackPlatformThread.h"
#include "JackRequest.h" #include "JackRequest.h"


namespace Jack namespace Jack
@@ -32,14 +32,14 @@ namespace Jack
\brief JackClientChannel using pipes. \brief JackClientChannel using pipes.
*/ */


class JackWinNamedPipeClientChannel : public JackClientChannelInterface, public JackRunnableInterface
class JackWinNamedPipeClientChannel : public detail::JackClientChannelInterface, public JackRunnableInterface
{ {


private: private:


JackWinNamedPipeClient fRequestPipe; // Pipe to communicate with the server JackWinNamedPipeClient fRequestPipe; // Pipe to communicate with the server
JackWinNamedPipeServer fNotificationListenPipe; // Pipe listener for server notification JackWinNamedPipeServer fNotificationListenPipe; // Pipe listener for server notification
JackThread* fThread; // Thread to execute the event loop
JackThread fThread; // Thread to execute the event loop
JackClient* fClient; JackClient* fClient;


void ServerSyncCall(JackRequest* req, JackResult* res, int* result); void ServerSyncCall(JackRequest* req, JackResult* res, int* result);
@@ -60,6 +60,8 @@ class JackWinNamedPipeClientChannel : public JackClientChannelInterface, public


void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result); void ClientCheck(const char* name, char* name_res, int protocol, int options, int* status, int* result);
void ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result); void ClientOpen(const char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result);
void ClientOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, int* result)
{}
void ClientClose(int refnum, int* result); void ClientClose(int refnum, int* result);


void ClientActivate(int refnum, int state, int* result); void ClientActivate(int refnum, int state, int* result);


+ 1
- 3
windows/JackWinNamedPipeNotifyChannel.h View File

@@ -30,7 +30,7 @@ namespace Jack
\brief JackNotifyChannel using named pipe. \brief JackNotifyChannel using named pipe.
*/ */


class JackWinNamedPipeNotifyChannel : public JackNotifyChannelInterface
class JackWinNamedPipeNotifyChannel
{ {


private: private:
@@ -41,8 +41,6 @@ class JackWinNamedPipeNotifyChannel : public JackNotifyChannelInterface


JackWinNamedPipeNotifyChannel() JackWinNamedPipeNotifyChannel()
{} {}
virtual ~JackWinNamedPipeNotifyChannel()
{}


int Open(const char* name); // Open the Server/Client connection int Open(const char* name); // Open the Server/Client connection
void Close(); // Close the Server/Client connection void Close(); // Close the Server/Client connection


+ 8
- 14
windows/JackWinNamedPipeServerChannel.cpp View File

@@ -44,9 +44,8 @@ HANDLE JackClientPipeThread::fMutex = NULL; // never released....
// fRefNum = -1 correspond to already removed client // fRefNum = -1 correspond to already removed client


JackClientPipeThread::JackClientPipeThread(JackWinNamedPipeClient* pipe) JackClientPipeThread::JackClientPipeThread(JackWinNamedPipeClient* pipe)
: fPipe(pipe), fServer(NULL), fRefNum(0)
: fPipe(pipe), fServer(NULL), fRefNum(0), fThread(this)
{ {
fThread = JackGlobals::MakeThread(this);
if (fMutex == NULL) if (fMutex == NULL)
fMutex = CreateMutex(NULL, FALSE, NULL); fMutex = CreateMutex(NULL, FALSE, NULL);
} }
@@ -55,7 +54,6 @@ JackClientPipeThread::~JackClientPipeThread()
{ {
jack_log("JackClientPipeThread::~JackClientPipeThread"); jack_log("JackClientPipeThread::~JackClientPipeThread");
delete fPipe; delete fPipe;
delete fThread;
} }


int JackClientPipeThread::Open(JackServer* server) // Open the Server/Client connection int JackClientPipeThread::Open(JackServer* server) // Open the Server/Client connection
@@ -63,7 +61,7 @@ int JackClientPipeThread::Open(JackServer* server) // Open the Server/Client con
fServer = server; fServer = server;


// Start listening // Start listening
if (fThread->Start() != 0) {
if (fThread.Start() != 0) {
jack_error("Cannot start Jack server listener\n"); jack_error("Cannot start Jack server listener\n");
return -1; return -1;
} else { } else {
@@ -80,7 +78,7 @@ void JackClientPipeThread::Close() // Close the Server/Client connection
all ressources will be desallocated at the end. all ressources will be desallocated at the end.
*/ */


fThread->Kill();
fThread.Kill();
fPipe->Close(); fPipe->Close();
fRefNum = -1; fRefNum = -1;
} }
@@ -354,10 +352,8 @@ void JackClientPipeThread::ClientKill()
Close(); Close();
} }


JackWinNamedPipeServerChannel::JackWinNamedPipeServerChannel()
{
fThread = JackGlobals::MakeThread(this);
}
JackWinNamedPipeServerChannel::JackWinNamedPipeServerChannel():fThread(this)
{}


JackWinNamedPipeServerChannel::~JackWinNamedPipeServerChannel() JackWinNamedPipeServerChannel::~JackWinNamedPipeServerChannel()
{ {
@@ -368,8 +364,6 @@ JackWinNamedPipeServerChannel::~JackWinNamedPipeServerChannel()
client->Close(); client->Close();
delete client; delete client;
} }

delete fThread;
} }


int JackWinNamedPipeServerChannel::Open(const char* server_name, JackServer* server) int JackWinNamedPipeServerChannel::Open(const char* server_name, JackServer* server)
@@ -386,7 +380,7 @@ int JackWinNamedPipeServerChannel::Open(const char* server_name, JackServer* ser
} }


// Start listening // Start listening
if (fThread->Start() != 0) {
if (fThread.Start() != 0) {
jack_error("Cannot start Jack server listener\n"); jack_error("Cannot start Jack server listener\n");
goto error; goto error;
} }
@@ -405,10 +399,10 @@ void JackWinNamedPipeServerChannel::Close()
all ressources will be desallocated at the end. all ressources will be desallocated at the end.
fRequestListenPipe.Close(); fRequestListenPipe.Close();
fThread->Stop();
fThread.Stop();
*/ */


fThread->Kill();
fThread.Kill();
fRequestListenPipe.Close(); fRequestListenPipe.Close();
} }




+ 5
- 5
windows/JackWinNamedPipeServerChannel.h View File

@@ -22,7 +22,7 @@ Copyright (C) 2004-2006 Grame


#include "JackChannel.h" #include "JackChannel.h"
#include "JackWinNamedPipe.h" #include "JackWinNamedPipe.h"
#include "JackThread.h"
#include "JackPlatformThread.h"
#include <map> #include <map>
#include <list> #include <list>


@@ -36,7 +36,7 @@ class JackClientPipeThread : public JackRunnableInterface


JackWinNamedPipeClient* fPipe; JackWinNamedPipeClient* fPipe;
JackServer* fServer; JackServer* fServer;
JackThread* fThread;
JackThread fThread;
int fRefNum; int fRefNum;


void ClientAdd(char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result); void ClientAdd(char* name, int pid, int* shared_engine, int* shared_client, int* shared_graph, int* result);
@@ -69,14 +69,14 @@ class JackClientPipeThread : public JackRunnableInterface
\brief JackServerChannel using pipe. \brief JackServerChannel using pipe.
*/ */


class JackWinNamedPipeServerChannel : public JackServerChannelInterface, public JackRunnableInterface
class JackWinNamedPipeServerChannel : public JackRunnableInterface
{ {


private: private:


JackWinNamedPipeServer fRequestListenPipe; // Pipe to create request socket for the client JackWinNamedPipeServer fRequestListenPipe; // Pipe to create request socket for the client
JackServer* fServer; JackServer* fServer;
JackThread* fThread; // Thread to execute the event loop
JackThread fThread; // Thread to execute the event loop
char fServerName[64]; char fServerName[64];


std::list<JackClientPipeThread*> fClientList; std::list<JackClientPipeThread*> fClientList;
@@ -86,7 +86,7 @@ class JackWinNamedPipeServerChannel : public JackServerChannelInterface, public
public: public:


JackWinNamedPipeServerChannel(); JackWinNamedPipeServerChannel();
virtual ~JackWinNamedPipeServerChannel();
~JackWinNamedPipeServerChannel();


int Open(const char* server_name, JackServer* server); // Open the Server/Client connection int Open(const char* server_name, JackServer* server); // Open the Server/Client connection
void Close(); // Close the Server/Client connection void Close(); // Close the Server/Client connection


+ 1
- 3
windows/JackWinNamedPipeServerNotifyChannel.h View File

@@ -30,7 +30,7 @@ namespace Jack
\brief JackServerNotifyChannel using pipes. \brief JackServerNotifyChannel using pipes.
*/ */


class JackWinNamedPipeServerNotifyChannel : public JackServerNotifyChannelInterface
class JackWinNamedPipeServerNotifyChannel
{ {
private: private:


@@ -40,8 +40,6 @@ class JackWinNamedPipeServerNotifyChannel : public JackServerNotifyChannelInterf


JackWinNamedPipeServerNotifyChannel() JackWinNamedPipeServerNotifyChannel()
{} {}
virtual ~JackWinNamedPipeServerNotifyChannel()
{}


int Open(const char* server_name); int Open(const char* server_name);
void Close(); void Close();


+ 2
- 3
windows/JackWinProcessSync.h View File

@@ -20,7 +20,6 @@ This program is free software; you can redistribute it and/or modify
#ifndef __JackWinProcessSync__ #ifndef __JackWinProcessSync__
#define __JackWinProcessSync__ #define __JackWinProcessSync__


#include "JackSyncInterface.h"
#include <windows.h> #include <windows.h>
#include <new> #include <new>


@@ -31,7 +30,7 @@ namespace Jack
\brief A synchronization primitive built using a condition variable. \brief A synchronization primitive built using a condition variable.
*/ */


class JackWinProcessSync : public JackSyncInterface
class JackWinProcessSync
{ {


private: private:
@@ -44,7 +43,7 @@ class JackWinProcessSync : public JackSyncInterface
{ {
fEvent = CreateEvent(NULL, FALSE, FALSE, NULL); fEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
} }
virtual ~JackWinProcessSync()
~JackWinProcessSync()
{ {
CloseHandle(fEvent); CloseHandle(fEvent);
} }


+ 2
- 4
windows/JackWinSemaphore.h View File

@@ -32,7 +32,7 @@ namespace Jack
\brief Inter process synchronization using system wide semaphore. \brief Inter process synchronization using system wide semaphore.
*/ */


class JackWinSemaphore : public JackSynchro
class JackWinSemaphore : public detail::JackSynchro
{ {


private: private:
@@ -45,9 +45,7 @@ class JackWinSemaphore : public JackSynchro


public: public:


JackWinSemaphore(): JackSynchro(), fSemaphore(NULL)
{}
virtual ~JackWinSemaphore()
JackWinSemaphore(): fSemaphore(NULL)
{} {}


bool Signal(); bool Signal();


+ 1
- 1
windows/JackWinThread.h View File

@@ -47,7 +47,7 @@ class JackWinThread : public JackThread
public: public:


JackWinThread(JackRunnableInterface* runnable); JackWinThread(JackRunnableInterface* runnable);
virtual ~JackWinThread();
~JackWinThread();


int Start(); int Start();
int StartSync(); int StartSync();


Loading…
Cancel
Save