Browse Source

Add mixed 32/64 mode (off by default).

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@3462 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/v1.9.3
sletz 16 years ago
parent
commit
478b718aa8
19 changed files with 142 additions and 94 deletions
  1. +2
    -1
      ChangeLog
  2. +1
    -1
      common/JackClientControl.h
  3. +2
    -3
      common/JackConnectionManager.h
  4. +1
    -5
      common/JackConstants.h
  5. +1
    -1
      common/JackEngineControl.h
  6. +7
    -4
      common/JackEngineProfiling.h
  7. +2
    -1
      common/JackFrameTimer.h
  8. +1
    -1
      common/JackGraphManager.h
  9. +1
    -1
      common/JackLibClient.cpp
  10. +2
    -2
      common/JackPort.cpp
  11. +6
    -6
      common/JackPort.h
  12. +54
    -31
      common/JackRequest.h
  13. +4
    -4
      common/JackShmMem.cpp
  14. +13
    -13
      common/JackShmMem.h
  15. +1
    -1
      common/JackTransportEngine.h
  16. +11
    -11
      common/shm.c
  17. +9
    -8
      common/shm.h
  18. +19
    -0
      posix/JackCompilerDeps_os.h
  19. +5
    -0
      wscript

+ 2
- 1
ChangeLog View File

@@ -26,7 +26,8 @@ Torben Hohn


2009-03-24 Stephane Letz <letz@grame.fr> 2009-03-24 Stephane Letz <letz@grame.fr>


* New JackBoomerDriver class for Boomer driver on Solaris.
* New JackBoomerDriver class for Boomer driver on Solaris.
* Add mixed 32/64 mode (off by default).


2009-03-23 Stephane Letz <letz@grame.fr> 2009-03-23 Stephane Letz <letz@grame.fr>




+ 1
- 1
common/JackClientControl.h View File

@@ -79,7 +79,7 @@ struct JackClientControl : public JackShmMemAble
fActive = false; fActive = false;
} }


};
} POST_PACKED_STRUCTURE;


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




+ 2
- 3
common/JackConnectionManager.h View File

@@ -356,7 +356,7 @@ struct JackClientTiming
{} {}
~JackClientTiming() ~JackClientTiming()
{} {}
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief Connection manager. \brief Connection manager.
@@ -445,12 +445,11 @@ class SERVER_EXPORT JackConnectionManager
return fInputCounter[refnum].GetValue(); return fInputCounter[refnum].GetValue();
} }




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


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


+ 1
- 5
common/JackConstants.h View File

@@ -83,11 +83,7 @@


#define ALL_CLIENTS -1 // for notification #define ALL_CLIENTS -1 // for notification


#if defined(__ppc64__) || defined(__x86_64__)
#define JACK_PROTOCOL_VERSION 6
#else
#define JACK_PROTOCOL_VERSION 5
#endif
#define JACK_PROTOCOL_VERSION 7


#define SOCKET_TIME_OUT 5 // in sec #define SOCKET_TIME_OUT 5 // in sec
#define DRIVER_OPEN_TIMEOUT 5 // in sec #define DRIVER_OPEN_TIMEOUT 5 // in sec


+ 1
- 1
common/JackEngineControl.h View File

@@ -166,7 +166,7 @@ struct SERVER_EXPORT JackEngineControl : public JackShmMem
void CalcCPULoad(JackClientInterface** table, JackGraphManager* manager, jack_time_t cur_cycle_begin, jack_time_t prev_cycle_end); void CalcCPULoad(JackClientInterface** table, JackGraphManager* manager, jack_time_t cur_cycle_begin, jack_time_t prev_cycle_end);
void ResetRollingUsecs(); void ResetRollingUsecs();


};
} POST_PACKED_STRUCTURE;


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




+ 7
- 4
common/JackEngineProfiling.h View File

@@ -52,7 +52,8 @@ struct JackTimingMeasureClient
fFinishedAt(0), fFinishedAt(0),
fStatus((jack_client_state_t)0) fStatus((jack_client_state_t)0)
{} {}
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief Timing interval in the global table for a given client \brief Timing interval in the global table for a given client
@@ -70,7 +71,8 @@ struct JackTimingClientInterval
fBeginInterval(-1), fBeginInterval(-1),
fEndInterval(-1) fEndInterval(-1)
{} {}
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief Timing stucture for a table of clients. \brief Timing stucture for a table of clients.
@@ -90,7 +92,8 @@ struct JackTimingMeasure
fCurCycleBegin(0), fCurCycleBegin(0),
fPrevCycleEnd(0) fPrevCycleEnd(0)
{} {}
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief Client timing monitoring. \brief Client timing monitoring.
@@ -125,7 +128,7 @@ class SERVER_EXPORT JackEngineProfiling
JackTimingMeasure* GetCurMeasure(); JackTimingMeasure* GetCurMeasure();


};
} POST_PACKED_STRUCTURE;


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




+ 2
- 1
common/JackFrameTimer.h View File

@@ -93,7 +93,8 @@ class SERVER_EXPORT JackFrameTimer : public JackAtomicState<JackTimer>
void ResetFrameTime(jack_nframes_t frames_rate, jack_time_t callback_usecs, jack_time_t period_usecs); void ResetFrameTime(jack_nframes_t frames_rate, jack_time_t callback_usecs, jack_time_t period_usecs);
void IncFrameTime(jack_nframes_t buffer_size, jack_time_t callback_usecs, jack_time_t period_usecs); void IncFrameTime(jack_nframes_t buffer_size, jack_time_t callback_usecs, jack_time_t period_usecs);
void ReadFrameTime(JackTimer* timer); void ReadFrameTime(JackTimer* timer);
};
} POST_PACKED_STRUCTURE;




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


+ 1
- 1
common/JackGraphManager.h View File

@@ -129,7 +129,7 @@ class SERVER_EXPORT JackGraphManager : public JackShmMem, public JackAtomicState
void Save(JackConnectionManager* dst); void Save(JackConnectionManager* dst);
void Restore(JackConnectionManager* src); void Restore(JackConnectionManager* src);


};
} POST_PACKED_STRUCTURE;




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


+ 1
- 1
common/JackLibClient.cpp View File

@@ -106,7 +106,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);


+ 2
- 2
common/JackPort.cpp View File

@@ -247,13 +247,13 @@ int JackPort::UnsetAlias(const char* alias)
void JackPort::ClearBuffer(jack_nframes_t frames) void JackPort::ClearBuffer(jack_nframes_t frames)
{ {
const JackPortType* type = GetPortType(fTypeId); const JackPortType* type = GetPortType(fTypeId);
(type->init)(fBuffer, frames * sizeof(float), frames);
(type->init)(GetBuffer(), frames * sizeof(float), frames);
} }


void JackPort::MixBuffers(void** src_buffers, int src_count, jack_nframes_t buffer_size) void JackPort::MixBuffers(void** src_buffers, int src_count, jack_nframes_t buffer_size)
{ {
const JackPortType* type = GetPortType(fTypeId); const JackPortType* type = GetPortType(fTypeId);
(type->mixdown)(fBuffer, src_buffers, src_count, buffer_size);
(type->mixdown)(GetBuffer(), src_buffers, src_count, buffer_size);
} }


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

+ 6
- 6
common/JackPort.h View File

@@ -55,9 +55,8 @@ class SERVER_EXPORT JackPort


bool fInUse; bool fInUse;
jack_port_id_t fTied; // Locally tied source port jack_port_id_t fTied; // Locally tied source port

MEM_ALIGN(float fBuffer[BUFFER_SIZE_MAX], 64); // 16 bytes alignment for vector code, 64 bytes better for cache loads/stores

float fBuffer[BUFFER_SIZE_MAX + 4];
bool IsUsed() const bool IsUsed() const
{ {
return fInUse; return fInUse;
@@ -99,14 +98,15 @@ class SERVER_EXPORT JackPort
return (fMonitorRequests > 0); return (fMonitorRequests > 0);
} }


// Since we are in shared memory, the resulting pointer cannot be cached, so align it here...
float* GetBuffer() float* GetBuffer()
{ {
return fBuffer;
return (float*)((long)fBuffer & ~15L) + 4;
} }


int GetRefNum() const; int GetRefNum() const;
};
} POST_PACKED_STRUCTURE;


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




+ 54
- 31
common/JackRequest.h View File

@@ -116,6 +116,7 @@ struct JackResult
{ {
return trans->Write(&fResult, sizeof(int)); return trans->Write(&fResult, sizeof(int));
} }
}; };


/*! /*!
@@ -151,7 +152,8 @@ struct JackClientCheckRequest : public JackRequest
CheckRes(trans->Write(&fProtocol, sizeof(int))); CheckRes(trans->Write(&fProtocol, sizeof(int)));
return trans->Write(&fOptions, sizeof(int)); return trans->Write(&fOptions, sizeof(int));
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief CheckClient result. \brief CheckClient result.
@@ -186,7 +188,8 @@ struct JackClientCheckResult : public JackResult
CheckRes(trans->Write(&fStatus, sizeof(int))); CheckRes(trans->Write(&fStatus, sizeof(int)));
return 0; return 0;
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief NewClient request. \brief NewClient request.
@@ -218,7 +221,8 @@ struct JackClientOpenRequest : public JackRequest
CheckRes(trans->Write(&fPID, sizeof(int))); CheckRes(trans->Write(&fPID, sizeof(int)));
return trans->Write(&fName, JACK_CLIENT_NAME_SIZE + 1); return trans->Write(&fName, JACK_CLIENT_NAME_SIZE + 1);
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief NewClient result. \brief NewClient result.
@@ -255,7 +259,8 @@ struct JackClientOpenResult : public JackResult
CheckRes(trans->Write(&fSharedGraph, sizeof(int))); CheckRes(trans->Write(&fSharedGraph, sizeof(int)));
return 0; return 0;
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief CloseClient request. \brief CloseClient request.
@@ -281,7 +286,8 @@ struct JackClientCloseRequest : public JackRequest
CheckRes(JackRequest::Write(trans)); CheckRes(JackRequest::Write(trans));
return trans->Write(&fRefNum, sizeof(int)); return trans->Write(&fRefNum, sizeof(int));
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief Activate request. \brief Activate request.
@@ -312,7 +318,7 @@ struct JackActivateRequest : public JackRequest
return trans->Write(&fState, sizeof(int)); return trans->Write(&fState, sizeof(int));
} }


};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief Deactivate request. \brief Deactivate request.
@@ -339,7 +345,7 @@ struct JackDeactivateRequest : public JackRequest
return trans->Write(&fRefNum, sizeof(int)); return trans->Write(&fRefNum, sizeof(int));
} }


};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief PortRegister request. \brief PortRegister request.
@@ -383,7 +389,8 @@ struct JackPortRegisterRequest : public JackRequest
CheckRes(trans->Write(&fBufferSize, sizeof(unsigned int))); CheckRes(trans->Write(&fBufferSize, sizeof(unsigned int)));
return 0; return 0;
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief PortRegister result. \brief PortRegister result.
@@ -408,7 +415,8 @@ struct JackPortRegisterResult : public JackResult
CheckRes(JackResult::Write(trans)); CheckRes(JackResult::Write(trans));
return trans->Write(&fPortIndex, sizeof(jack_port_id_t)); return trans->Write(&fPortIndex, sizeof(jack_port_id_t));
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief PortUnregister request. \brief PortUnregister request.
@@ -440,7 +448,8 @@ struct JackPortUnRegisterRequest : public JackRequest
CheckRes(trans->Write(&fPortIndex, sizeof(jack_port_id_t))); CheckRes(trans->Write(&fPortIndex, sizeof(jack_port_id_t)));
return 0; return 0;
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief PortConnectName request. \brief PortConnectName request.
@@ -479,7 +488,8 @@ struct JackPortConnectNameRequest : public JackRequest
CheckRes(trans->Write(&fDst, JACK_PORT_NAME_SIZE + 1)); CheckRes(trans->Write(&fDst, JACK_PORT_NAME_SIZE + 1));
return 0; return 0;
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief PortDisconnectName request. \brief PortDisconnectName request.
@@ -517,7 +527,8 @@ struct JackPortDisconnectNameRequest : public JackRequest
CheckRes(trans->Write(&fDst, JACK_PORT_NAME_SIZE + 1)); CheckRes(trans->Write(&fDst, JACK_PORT_NAME_SIZE + 1));
return 0; return 0;
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief PortConnect request. \brief PortConnect request.
@@ -552,8 +563,8 @@ struct JackPortConnectRequest : public JackRequest
CheckRes(trans->Write(&fDst, sizeof(jack_port_id_t))); CheckRes(trans->Write(&fDst, sizeof(jack_port_id_t)));
return 0; return 0;
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief PortDisconnect request. \brief PortDisconnect request.
@@ -589,7 +600,8 @@ struct JackPortDisconnectRequest : public JackRequest
return 0; return 0;


} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief PortRename request. \brief PortRename request.
@@ -627,7 +639,8 @@ struct JackPortRenameRequest : public JackRequest
return 0; return 0;


} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief SetBufferSize request. \brief SetBufferSize request.
@@ -654,7 +667,8 @@ struct JackSetBufferSizeRequest : public JackRequest
CheckRes(JackRequest::Write(trans)); CheckRes(JackRequest::Write(trans));
return trans->Write(&fBufferSize, sizeof(jack_nframes_t)); return trans->Write(&fBufferSize, sizeof(jack_nframes_t));
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief SetFreeWheel request. \brief SetFreeWheel request.
@@ -681,7 +695,8 @@ struct JackSetFreeWheelRequest : public JackRequest
CheckRes(JackRequest::Write(trans)); CheckRes(JackRequest::Write(trans));
return trans->Write(&fOnOff, sizeof(int)); return trans->Write(&fOnOff, sizeof(int));
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief ReleaseTimebase request. \brief ReleaseTimebase request.
@@ -708,7 +723,8 @@ struct JackReleaseTimebaseRequest : public JackRequest
CheckRes(JackRequest::Write(trans)); CheckRes(JackRequest::Write(trans));
return trans->Write(&fRefNum, sizeof(int)); return trans->Write(&fRefNum, sizeof(int));
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief SetTimebaseCallback request. \brief SetTimebaseCallback request.
@@ -738,7 +754,8 @@ struct JackSetTimebaseCallbackRequest : public JackRequest
CheckRes(trans->Write(&fRefNum, sizeof(int))); CheckRes(trans->Write(&fRefNum, sizeof(int)));
return trans->Write(&fConditionnal, sizeof(int)); return trans->Write(&fConditionnal, sizeof(int));
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief GetInternalClientName request. \brief GetInternalClientName request.
@@ -768,7 +785,8 @@ struct JackGetInternalClientNameRequest : public JackRequest
CheckRes(trans->Write(&fRefNum, sizeof(int))); CheckRes(trans->Write(&fRefNum, sizeof(int)));
return trans->Write(&fIntRefNum, sizeof(int)); return trans->Write(&fIntRefNum, sizeof(int));
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief GetInternalClient result. \brief GetInternalClient result.
@@ -800,7 +818,8 @@ struct JackGetInternalClientNameResult : public JackResult
CheckRes(trans->Write(&fName, JACK_CLIENT_NAME_SIZE + 1)); CheckRes(trans->Write(&fName, JACK_CLIENT_NAME_SIZE + 1));
return 0; return 0;
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief InternalClientHandle request. \brief InternalClientHandle request.
@@ -832,7 +851,8 @@ struct JackInternalClientHandleRequest : public JackRequest
CheckRes(trans->Write(&fRefNum, sizeof(int))); CheckRes(trans->Write(&fRefNum, sizeof(int)));
return trans->Write(&fName, JACK_CLIENT_NAME_SIZE + 1); return trans->Write(&fName, JACK_CLIENT_NAME_SIZE + 1);
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief InternalClientHandle result. \brief InternalClientHandle result.
@@ -865,7 +885,8 @@ struct JackInternalClientHandleResult : public JackResult
CheckRes(trans->Write(&fIntRefNum, sizeof(int))); CheckRes(trans->Write(&fIntRefNum, sizeof(int)));
return 0; return 0;
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief InternalClientLoad request. \brief InternalClientLoad request.
@@ -912,7 +933,8 @@ struct JackInternalClientLoadRequest : public JackRequest
CheckRes(trans->Write(&fLoadInitName, JACK_LOAD_INIT_LIMIT + 1)); CheckRes(trans->Write(&fLoadInitName, JACK_LOAD_INIT_LIMIT + 1));
return trans->Write(&fOptions, sizeof(int)); return trans->Write(&fOptions, sizeof(int));
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief InternalClientLoad result. \brief InternalClientLoad result.
@@ -945,7 +967,8 @@ struct JackInternalClientLoadResult : public JackResult
CheckRes(trans->Write(&fIntRefNum, sizeof(int))); CheckRes(trans->Write(&fIntRefNum, sizeof(int)));
return 0; return 0;
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief InternalClientUnload request. \brief InternalClientUnload request.
@@ -975,8 +998,7 @@ struct JackInternalClientUnloadRequest : public JackRequest
CheckRes(trans->Write(&fRefNum, sizeof(int))); CheckRes(trans->Write(&fRefNum, sizeof(int)));
return trans->Write(&fIntRefNum, sizeof(int)); return trans->Write(&fIntRefNum, sizeof(int));
} }
};

} POST_PACKED_STRUCTURE;


/*! /*!
\brief InternalClientLoad result. \brief InternalClientLoad result.
@@ -1006,7 +1028,8 @@ struct JackInternalClientUnloadResult : public JackResult
CheckRes(trans->Write(&fStatus, sizeof(int))); CheckRes(trans->Write(&fStatus, sizeof(int)));
return 0; return 0;
} }
};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief ClientNotification request. \brief ClientNotification request.
@@ -1042,7 +1065,7 @@ struct JackClientNotificationRequest : public JackRequest
return 0; return 0;
} }


};
} POST_PACKED_STRUCTURE;


/*! /*!
\brief ClientNotification. \brief ClientNotification.
@@ -1087,7 +1110,7 @@ struct JackClientNotification
return 0; return 0;
} }


};
} POST_PACKED_STRUCTURE;


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




+ 4
- 4
common/JackShmMem.cpp View File

@@ -37,7 +37,7 @@ JackShmMem::JackShmMem()
void JackShmMemAble::Init() void JackShmMemAble::Init()
{ {
fInfo.index = gInfo.index; fInfo.index = gInfo.index;
fInfo.attached_at = gInfo.attached_at;
fInfo.ptr.attached_at = gInfo.ptr.attached_at;
fInfo.size = gInfo.size; fInfo.size = gInfo.size;
} }
@@ -71,9 +71,9 @@ void* JackShmMem::operator new(size_t size)
// so use an intermediate global data // so use an intermediate global data
gInfo.index = info.index; gInfo.index = info.index;
gInfo.size = size; gInfo.size = size;
gInfo.attached_at = info.attached_at;
gInfo.ptr.attached_at = info.ptr.attached_at;


jack_log("JackShmMem::new index = %ld attached = %x size = %ld ", info.index, info.attached_at, size);
jack_log("JackShmMem::new index = %ld attached = %x size = %ld ", info.index, info.ptr.attached_at, size);
return obj; return obj;


error: error:
@@ -86,7 +86,7 @@ void JackShmMem::operator delete(void* p, size_t size)
jack_shm_info_t info; jack_shm_info_t info;
JackShmMem* obj = (JackShmMem*)p; JackShmMem* obj = (JackShmMem*)p;
info.index = obj->fInfo.index; info.index = obj->fInfo.index;
info.attached_at = obj->fInfo.attached_at;
info.ptr.attached_at = obj->fInfo.ptr.attached_at;


jack_log("JackShmMem::delete size = %ld index = %ld", size, info.index); jack_log("JackShmMem::delete size = %ld index = %ld", size, info.index);




+ 13
- 13
common/JackShmMem.h View File

@@ -102,7 +102,7 @@ class JackShmMemAble


char* GetShmAddress() char* GetShmAddress()
{ {
return (char*)fInfo.attached_at;
return (char*)fInfo.ptr.attached_at;
} }


void LockMemory() void LockMemory()
@@ -173,7 +173,7 @@ class JackShmReadWritePtr
JackShmReadWritePtr() JackShmReadWritePtr()
{ {
fInfo.index = -1; fInfo.index = -1;
fInfo.attached_at = NULL;
fInfo.ptr.attached_at = (char*)NULL;
} }


JackShmReadWritePtr(int index, const char* server_name) JackShmReadWritePtr(int index, const char* server_name)
@@ -192,12 +192,12 @@ class JackShmReadWritePtr


T* operator->() const T* operator->() const
{ {
return (T*)fInfo.attached_at;
return (T*)fInfo.ptr.attached_at;
} }


operator T*() const operator T*() const
{ {
return (T*)fInfo.attached_at;
return (T*)fInfo.ptr.attached_at;
} }


JackShmReadWritePtr& operator=(int index) JackShmReadWritePtr& operator=(int index)
@@ -218,7 +218,7 @@ class JackShmReadWritePtr


T* GetShmAddress() T* GetShmAddress()
{ {
return (T*)fInfo.attached_at;
return (T*)fInfo.ptr.attached_at;
} }
}; };


@@ -259,7 +259,7 @@ class JackShmReadWritePtr1
JackShmReadWritePtr1() JackShmReadWritePtr1()
{ {
fInfo.index = -1; fInfo.index = -1;
fInfo.attached_at = NULL;
fInfo.ptr.attached_at = NULL;
} }


JackShmReadWritePtr1(int index, const char* server_name) JackShmReadWritePtr1(int index, const char* server_name)
@@ -278,12 +278,12 @@ class JackShmReadWritePtr1


T* operator->() const T* operator->() const
{ {
return (T*)fInfo.attached_at;
return (T*)fInfo.ptr.attached_at;
} }


operator T*() const operator T*() const
{ {
return (T*)fInfo.attached_at;
return (T*)fInfo.ptr.attached_at;
} }


JackShmReadWritePtr1& operator=(int index) JackShmReadWritePtr1& operator=(int index)
@@ -304,7 +304,7 @@ class JackShmReadWritePtr1


T* GetShmAddress() T* GetShmAddress()
{ {
return (T*)fInfo.attached_at;
return (T*)fInfo.ptr.attached_at;
} }
}; };


@@ -339,7 +339,7 @@ class JackShmReadPtr
JackShmReadPtr() JackShmReadPtr()
{ {
fInfo.index = -1; fInfo.index = -1;
fInfo.attached_at = NULL;
fInfo.ptr.attached_at = NULL;
} }


JackShmReadPtr(int index, const char* server_name) JackShmReadPtr(int index, const char* server_name)
@@ -358,12 +358,12 @@ class JackShmReadPtr


T* operator->() const T* operator->() const
{ {
return (T*)fInfo.attached_at;
return (T*)fInfo.ptr.attached_at;
} }


operator T*() const operator T*() const
{ {
return (T*)fInfo.attached_at;
return (T*)fInfo.ptr.attached_at;
} }


JackShmReadPtr& operator=(int index) JackShmReadPtr& operator=(int index)
@@ -384,7 +384,7 @@ class JackShmReadPtr


T* GetShmAddress() T* GetShmAddress()
{ {
return (T*)fInfo.attached_at;
return (T*)fInfo.ptr.attached_at;
} }


}; };


+ 1
- 1
common/JackTransportEngine.h View File

@@ -193,7 +193,7 @@ class SERVER_EXPORT JackTransportEngine : public JackAtomicArrayState<jack_posit
fNetworkSync = sync; fNetworkSync = sync;
} }


};
} POST_PACKED_STRUCTURE;




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


+ 11
- 11
common/shm.c View File

@@ -111,7 +111,7 @@ static jack_shm_info_t registry_info = {/* SHM info for the registry */
#else #else
static jack_shm_info_t registry_info = { /* SHM info for the registry */ static jack_shm_info_t registry_info = { /* SHM info for the registry */
.index = JACK_SHM_NULL_INDEX, .index = JACK_SHM_NULL_INDEX,
.attached_at = MAP_FAILED
.ptr.attached_at = MAP_FAILED
}; };
#endif #endif


@@ -367,7 +367,7 @@ jack_initialize_shm (const char *server_name)


char* jack_shm_addr (jack_shm_info_t* si) char* jack_shm_addr (jack_shm_info_t* si)
{ {
return (char*)si->attached_at;
return (char*)si->ptr.attached_at;
} }


void void
@@ -638,7 +638,7 @@ jack_access_registry (jack_shm_info_t *ri)
return rc; return rc;
} }


if ((ri->attached_at = mmap (0, JACK_SHM_REGISTRY_SIZE,
if ((ri->ptr.attached_at = mmap (0, JACK_SHM_REGISTRY_SIZE,
PROT_READ|PROT_WRITE, PROT_READ|PROT_WRITE,
MAP_SHARED, shm_fd, 0)) == MAP_FAILED) { MAP_SHARED, shm_fd, 0)) == MAP_FAILED) {
jack_error ("Cannot mmap shm registry segment (%s)", jack_error ("Cannot mmap shm registry segment (%s)",
@@ -649,7 +649,7 @@ jack_access_registry (jack_shm_info_t *ri)


/* set up global pointers */ /* set up global pointers */
ri->index = JACK_SHM_REGISTRY_INDEX; ri->index = JACK_SHM_REGISTRY_INDEX;
jack_shm_header = ri->attached_at;
jack_shm_header = ri->ptr.attached_at;
jack_shm_registry = (jack_shm_registry_t *) (jack_shm_header + 1); jack_shm_registry = (jack_shm_registry_t *) (jack_shm_header + 1);
close (shm_fd); // steph close (shm_fd); // steph
@@ -694,7 +694,7 @@ jack_create_registry (jack_shm_info_t *ri)
return rc; return rc;
} }


if ((ri->attached_at = mmap (0, JACK_SHM_REGISTRY_SIZE,
if ((ri->ptr.attached_at = mmap (0, JACK_SHM_REGISTRY_SIZE,
PROT_READ|PROT_WRITE, PROT_READ|PROT_WRITE,
MAP_SHARED, shm_fd, 0)) == MAP_FAILED) { MAP_SHARED, shm_fd, 0)) == MAP_FAILED) {
jack_error ("Cannot mmap shm registry segment (%s)", jack_error ("Cannot mmap shm registry segment (%s)",
@@ -706,7 +706,7 @@ jack_create_registry (jack_shm_info_t *ri)


/* set up global pointers */ /* set up global pointers */
ri->index = JACK_SHM_REGISTRY_INDEX; ri->index = JACK_SHM_REGISTRY_INDEX;
jack_shm_header = ri->attached_at;
jack_shm_header = ri->ptr.attached_at;
jack_shm_registry = (jack_shm_registry_t *) (jack_shm_header + 1); jack_shm_registry = (jack_shm_registry_t *) (jack_shm_header + 1);


/* initialize registry contents */ /* initialize registry contents */
@@ -726,8 +726,8 @@ void
jack_release_shm (jack_shm_info_t* si) jack_release_shm (jack_shm_info_t* si)
{ {
/* registry may or may not be locked */ /* registry may or may not be locked */
if (si->attached_at != MAP_FAILED) {
munmap (si->attached_at, jack_shm_registry[si->index].size);
if (si->ptr.attached_at != MAP_FAILED) {
munmap (si->ptr.attached_at, jack_shm_registry[si->index].size);
} }
} }


@@ -781,7 +781,7 @@ jack_shmalloc (const char *shm_name, jack_shmsize_t size, jack_shm_info_t* si)
strncpy (registry->id, name, sizeof (registry->id)); strncpy (registry->id, name, sizeof (registry->id));
registry->allocator = getpid(); registry->allocator = getpid();
si->index = registry->index; si->index = registry->index;
si->attached_at = MAP_FAILED; /* not attached */
si->ptr.attached_at = MAP_FAILED; /* not attached */
rc = 0; /* success */ rc = 0; /* success */


unlock: unlock:
@@ -802,7 +802,7 @@ jack_attach_shm (jack_shm_info_t* si)
return -1; return -1;
} }


if ((si->attached_at = mmap (0, registry->size, PROT_READ|PROT_WRITE,
if ((si->ptr.attached_at = mmap (0, registry->size, PROT_READ|PROT_WRITE,
MAP_SHARED, shm_fd, 0)) == MAP_FAILED) { MAP_SHARED, shm_fd, 0)) == MAP_FAILED) {
jack_error ("Cannot mmap shm segment %s (%s)", jack_error ("Cannot mmap shm segment %s (%s)",
registry->id, registry->id,
@@ -828,7 +828,7 @@ jack_attach_shm_read (jack_shm_info_t* si)
return -1; return -1;
} }


if ((si->attached_at = mmap (0, registry->size, PROT_READ,
if ((si->ptr.attached_at = mmap (0, registry->size, PROT_READ,
MAP_SHARED, shm_fd, 0)) == MAP_FAILED) { MAP_SHARED, shm_fd, 0)) == MAP_FAILED) {
jack_error ("Cannot mmap shm segment %s (%s)", jack_error ("Cannot mmap shm segment %s (%s)",
registry->id, registry->id,


+ 9
- 8
common/shm.h View File

@@ -35,7 +35,7 @@ extern "C"
#ifndef SHM_NAME_MAX #ifndef SHM_NAME_MAX
#define SHM_NAME_MAX NAME_MAX #define SHM_NAME_MAX NAME_MAX
#endif #endif
typedef char shm_name_t[SHM_NAME_MAX];
typedef char shm_name_t[SHM_NAME_MAX];
typedef shm_name_t jack_shm_id_t; typedef shm_name_t jack_shm_id_t;


#elif WIN32 // steph TO CHECK #elif WIN32 // steph TO CHECK
@@ -43,7 +43,7 @@ extern "C"
#ifndef SHM_NAME_MAX #ifndef SHM_NAME_MAX
#define SHM_NAME_MAX NAME_MAX #define SHM_NAME_MAX NAME_MAX
#endif #endif
typedef char shm_name_t[SHM_NAME_MAX];
typedef char shm_name_t[SHM_NAME_MAX];
typedef shm_name_t jack_shm_id_t; typedef shm_name_t jack_shm_id_t;


#else #else
@@ -73,7 +73,6 @@ extern "C"
#ifdef WIN32 #ifdef WIN32
int pid; /* process ID */ int pid; /* process ID */
#else #else

pid_t pid; /* process ID */ pid_t pid; /* process ID */
#endif #endif


@@ -96,10 +95,8 @@ extern "C"
jack_shm_registry_index_t index; /* offset into the registry */ jack_shm_registry_index_t index; /* offset into the registry */


#ifdef WIN32 #ifdef WIN32

int allocator; /* PID that created shm segment */ int allocator; /* PID that created shm segment */
#else #else

pid_t allocator; /* PID that created shm segment */ pid_t allocator; /* PID that created shm segment */
#endif #endif


@@ -118,12 +115,16 @@ extern "C"
* indicating where the shared memory has been * indicating where the shared memory has been
* attached to the address space. * attached to the address space.
*/ */
typedef struct _jack_shm_info { typedef struct _jack_shm_info {
jack_shm_registry_index_t index; /* offset into the registry */ jack_shm_registry_index_t index; /* offset into the registry */
size_t size;
void *attached_at; /* address where attached */
uint32_t size;
union {
void *attached_at; /* address where attached */
char ptr_size[8];
} ptr; /* a "pointer" that has the same 8 bytes size when compling in 32 or 64 bits */
} }
jack_shm_info_t;
POST_PACKED_STRUCTURE jack_shm_info_t;


/* utility functions used only within JACK */ /* utility functions used only within JACK */


+ 19
- 0
posix/JackCompilerDeps_os.h View File

@@ -20,7 +20,25 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#ifndef __JackCompilerDeps_POSIX__ #ifndef __JackCompilerDeps_POSIX__
#define __JackCompilerDeps_POSIX__ #define __JackCompilerDeps_POSIX__


#include "JackConstants.h"

#if __GNUC__ #if __GNUC__
#ifndef POST_PACKED_STRUCTURE
/* POST_PACKED_STRUCTURE needs to be a macro which
expands into a compiler directive. The directive must
tell the compiler to arrange the preceding structure
declaration so that it is packed on byte-boundaries rather
than use the natural alignment of the processor and/or
compiler.
*/
#if (__GNUC__< 4) /* On Solaris, does not seem to work with GCC 3.XX serie */
#define POST_PACKED_STRUCTURE
#elif defined(JACK_32_64)
#define POST_PACKED_STRUCTURE __attribute__((__packed__))
#else
#define POST_PACKED_STRUCTURE
#endif
#endif
#define MEM_ALIGN(x,y) x __attribute__((aligned(y))) #define MEM_ALIGN(x,y) x __attribute__((aligned(y)))
#define EXPORT __attribute__((visibility("default"))) #define EXPORT __attribute__((visibility("default")))
#ifdef SERVER_SIDE #ifdef SERVER_SIDE
@@ -36,6 +54,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#define MEM_ALIGN(x,y) x #define MEM_ALIGN(x,y) x
#define EXPORT #define EXPORT
#define SERVER_EXPORT #define SERVER_EXPORT
/* Add other things here for non-gcc platforms for POST_PACKED_STRUCTURE */
#endif #endif
#endif #endif


+ 5
- 0
wscript View File

@@ -64,6 +64,7 @@ def set_options(opt):
opt.add_option('--dbus', action='store_true', default=False, help='Enable D-Bus JACK (jackdbus)') opt.add_option('--dbus', action='store_true', default=False, help='Enable D-Bus JACK (jackdbus)')
opt.add_option('--doxygen', action='store_true', default=False, help='Enable build of doxygen documentation') opt.add_option('--doxygen', action='store_true', default=False, help='Enable build of doxygen documentation')
opt.add_option('--profile', action='store_true', default=False, help='Build with engine profiling') opt.add_option('--profile', action='store_true', default=False, help='Build with engine profiling')
opt.add_option('--mixed', action='store_true', default=False, help='Build with 32/64 mixed mode')
opt.add_option('--clients', default=64, type="int", dest="clients", help='Maximum number of JACK clients') opt.add_option('--clients', default=64, type="int", dest="clients", help='Maximum number of JACK clients')
opt.add_option('--ports', default=1024, type="int", dest="ports", help='Maximum number of ports') opt.add_option('--ports', default=1024, type="int", dest="ports", help='Maximum number of ports')
opt.add_option('--clients', default=64, type="int", dest="clients", help='Maximum number of JACK clients') opt.add_option('--clients', default=64, type="int", dest="clients", help='Maximum number of JACK clients')
@@ -120,6 +121,7 @@ def configure(conf):


conf.env['BUILD_DOXYGEN_DOCS'] = Options.options.doxygen conf.env['BUILD_DOXYGEN_DOCS'] = Options.options.doxygen
conf.env['BUILD_WITH_PROFILE'] = Options.options.profile conf.env['BUILD_WITH_PROFILE'] = Options.options.profile
conf.env['BUILD_WITH_32_64'] = Options.options.mixed


if Options.options.libdir: if Options.options.libdir:
conf.env['LIBDIR'] = Options.options.libdir conf.env['LIBDIR'] = Options.options.libdir
@@ -137,6 +139,8 @@ def configure(conf):
conf.define('JACK_DBUS', 1) conf.define('JACK_DBUS', 1)
if conf.env['BUILD_WITH_PROFILE'] == True: if conf.env['BUILD_WITH_PROFILE'] == True:
conf.define('JACK_MONITOR', 1) conf.define('JACK_MONITOR', 1)
if conf.env['BUILD_WITH_32_64'] == True:
conf.define('JACK_32_64', 1)
conf.write_config_header('config.h') conf.write_config_header('config.h')


svnrev = None svnrev = None
@@ -163,6 +167,7 @@ def configure(conf):
display_msg("Drivers directory", conf.env['ADDON_DIR'], 'CYAN') display_msg("Drivers directory", conf.env['ADDON_DIR'], 'CYAN')
display_feature('Build doxygen documentation', conf.env['BUILD_DOXYGEN_DOCS']) display_feature('Build doxygen documentation', conf.env['BUILD_DOXYGEN_DOCS'])
display_feature('Build with engine profiling', conf.env['BUILD_WITH_PROFILE']) display_feature('Build with engine profiling', conf.env['BUILD_WITH_PROFILE'])
display_feature('Build with 32/64 mixed mode', conf.env['BUILD_WITH_32_64'])
if conf.env['IS_LINUX']: if conf.env['IS_LINUX']:


Loading…
Cancel
Save