From d9f21771826b8bbe3645b51520d8548170d1b8ba Mon Sep 17 00:00:00 2001 From: Basil Nutmeg Date: Sat, 21 Jul 2012 17:16:03 -0700 Subject: [PATCH 1/5] Delete some redundant macros and typedefs. A few internal source files were redeclaring types and macros also declared in the external jack/types.h and jack/systemdeps.h headers. Since the external header needs them, delete them from the internal headers. --- common/JackTypes.h | 7 +------ macosx/JackCompilerDeps_os.h | 14 +------------- posix/JackCompilerDeps_os.h | 18 ++---------------- posix/JackTypes_os.h | 2 -- windows/JackCompilerDeps_os.h | 31 ------------------------------- windows/JackTypes_os.h | 1 - 6 files changed, 4 insertions(+), 69 deletions(-) diff --git a/common/JackTypes.h b/common/JackTypes.h index b4bad8d6..04f186e0 100644 --- a/common/JackTypes.h +++ b/common/JackTypes.h @@ -21,6 +21,7 @@ #ifndef __JackTypes__ #define __JackTypes__ +#include "types.h" #include "JackCompilerDeps.h" typedef unsigned short UInt16; @@ -34,12 +35,6 @@ typedef signed long SInt32; #include "JackTypes_os.h" -/** - * Type used to represent the value of free running - * monotonic clock with units of microseconds. - */ -typedef uint64_t jack_time_t; - typedef uint16_t jack_int_t; // Internal type for ports and refnum typedef enum { diff --git a/macosx/JackCompilerDeps_os.h b/macosx/JackCompilerDeps_os.h index 61a569d7..dddd6d08 100644 --- a/macosx/JackCompilerDeps_os.h +++ b/macosx/JackCompilerDeps_os.h @@ -24,18 +24,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #if __GNUC__ - #define PRE_PACKED_STRUCTURE - - #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. - */ - #define POST_PACKED_STRUCTURE __attribute__((__packed__)) - #endif #define MEM_ALIGN(x,y) x __attribute__((aligned(y))) #define LIB_EXPORT __attribute__((visibility("default"))) #ifdef SERVER_SIDE @@ -47,7 +35,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #define MEM_ALIGN(x,y) x #define LIB_EXPORT #define SERVER_EXPORT - /* Add other things here for non-gcc platforms for PRE and POST_PACKED_STRUCTURE */ + /* Add other things here for non-gcc platforms */ #endif #endif diff --git a/posix/JackCompilerDeps_os.h b/posix/JackCompilerDeps_os.h index c1c17cda..591db5c3 100644 --- a/posix/JackCompilerDeps_os.h +++ b/posix/JackCompilerDeps_os.h @@ -23,19 +23,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "JackConstants.h" #if __GNUC__ - #define PRE_PACKED_STRUCTURE - - #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. - */ - #define POST_PACKED_STRUCTURE __attribute__((__packed__)) - #endif - + #define MEM_ALIGN(x,y) x __attribute__((aligned(y))) #define LIB_EXPORT __attribute__((visibility("default"))) #ifdef SERVER_SIDE @@ -53,9 +41,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #define LIB_EXPORT #define SERVER_EXPORT - /* Add other things here for non-gcc platforms for PRE and POST_PACKED_STRUCTURE */ - #define PRE_PACKED_STRUCTURE - #define POST_PACKED_STRUCTURE + /* Add other things here for non-gcc platforms */ #endif #endif diff --git a/posix/JackTypes_os.h b/posix/JackTypes_os.h index 896d91ea..01e6c9b9 100644 --- a/posix/JackTypes_os.h +++ b/posix/JackTypes_os.h @@ -26,8 +26,6 @@ typedef unsigned long long UInt64; typedef pthread_key_t jack_tls_key; -typedef pthread_t jack_native_thread_t; - typedef int (*jack_thread_creator_t)(pthread_t*, const pthread_attr_t*, void* (*function)(void*), void* arg); #endif diff --git a/windows/JackCompilerDeps_os.h b/windows/JackCompilerDeps_os.h index ca7b7a38..0ca76b15 100644 --- a/windows/JackCompilerDeps_os.h +++ b/windows/JackCompilerDeps_os.h @@ -33,41 +33,10 @@ #define MEM_ALIGN(x,y) x __attribute__((aligned(y))) - #define PRE_PACKED_STRUCTURE - #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. - */ - #define POST_PACKED_STRUCTURE __attribute__((__packed__)) - #endif - #else #define MEM_ALIGN(x,y) x - #ifdef _MSC_VER - #define PRE_PACKED_STRUCTURE1 __pragma(pack(push,1)) - #define PRE_PACKED_STRUCTURE PRE_PACKED_STRUCTURE1 - /* PRE_PACKED_STRUCTURE needs to be a macro which - expands into a compiler directive. The directive must - tell the compiler to arrange the following structure - declaration so that it is packed on byte-boundaries rather - than use the natural alignment of the processor and/or - compiler. - */ - #define POST_PACKED_STRUCTURE ;__pragma(pack(pop)) - /* and POST_PACKED_STRUCTURE needs to be a macro which - restores the packing to its previous setting */ - #else - /* Other Windows compilers to go here */ - #define PRE_PACKED_STRUCTURE - #define POST_PACKED_STRUCTURE - #endif - #endif #if defined(_MSC_VER) /* Added by JE - 31-01-2012 */ diff --git a/windows/JackTypes_os.h b/windows/JackTypes_os.h index 35b92644..0da744f7 100644 --- a/windows/JackTypes_os.h +++ b/windows/JackTypes_os.h @@ -27,7 +27,6 @@ typedef ULONGLONG UInt64; typedef UInt64 uint64_t; typedef unsigned short uint16_t; typedef DWORD jack_tls_key; -typedef HANDLE jack_native_thread_t; #endif From 459a518ef22b7b16b33c1d806f2b162b676a75f9 Mon Sep 17 00:00:00 2001 From: Basil Nutmeg Date: Sat, 21 Jul 2012 17:30:08 -0700 Subject: [PATCH 2/5] Add new typedefs to support 32/64 mixed mode. The types int64_t, uint64_t, and double have different alignments between common 32-bit and 64-bit platforms, and this can cause trouble when they are used in structs which are shared between address spaces. Introduce new typedefs for these types with special alignment attributes to request consistent alignment. ABI implications: In the current tree, with packed attributes on the relevant structs, the only impact of this change is that the alignments of jack_unique_t and jack_time_t are increased from 4 to 8 on 32-bit platforms, so the layouts of structs which include them as members may be affected. The ABI impact relative to the tree before the packed attributes were introduced is that the alignment of jack_position_t is increased from 4 to 8 on 32-bit platforms. The layout of the struct itself is unmodified, though the layouts of structs which include it as a member may be affected. --- common/jack/systemdeps.h | 14 ++++++++++++++ common/jack/types.h | 22 +++++++++++++++------- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/common/jack/systemdeps.h b/common/jack/systemdeps.h index 3c3c064f..5e69d303 100644 --- a/common/jack/systemdeps.h +++ b/common/jack/systemdeps.h @@ -34,6 +34,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #define PRE_PACKED_STRUCTURE #define POST_PACKED_STRUCTURE __attribute__((__packed__)) + #define JACK_ALIGN(N) __attribute__((__aligned__(N))) + + /* A utility for declaring a type which is aligned to its size. */ + #define JACK_ALIGNED_TYPE(T) JACK_ALIGN(sizeof(T)) T + #else #ifdef _MSC_VER @@ -49,9 +54,18 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #define POST_PACKED_STRUCTURE ;__pragma(pack(pop)) /* and POST_PACKED_STRUCTURE needs to be a macro which restores the packing to its previous setting */ + + #define JACK_ALIGN(N) __declspec(align(N)) + + /* A utility for declaring a type which is aligned to its size. */ + #define JACK_ALIGNED_TYPE(T) JACK_ALIGN(sizeof(T)) T + #else #define PRE_PACKED_STRUCTURE #define POST_PACKED_STRUCTURE + + #define JACK_ALIGN(N) + #define JACK_ALIGNED_TYPE(T) T #endif #endif diff --git a/common/jack/types.h b/common/jack/types.h index fa059159..53bef451 100644 --- a/common/jack/types.h +++ b/common/jack/types.h @@ -23,6 +23,14 @@ #include +/* To facilitate direct sharing between 32-bit and 64-bit code, declare + * fully-aligned typedefs for types which would otherwise have differing + * alignment between the two. + */ +typedef JACK_ALIGNED_TYPE(double) jack_double; +typedef JACK_ALIGNED_TYPE(int64_t) jack_int64_t; +typedef JACK_ALIGNED_TYPE(uint64_t) jack_uint64_t; + typedef int32_t jack_shmsize_t; /** @@ -39,7 +47,7 @@ typedef uint32_t jack_nframes_t; * Type used to represent the value of free running * monotonic clock with units of microseconds. */ -typedef uint64_t jack_time_t; +typedef jack_uint64_t jack_time_t; /** * Maximum size of @a load_init string passed to an internal client @@ -530,7 +538,7 @@ typedef enum { } jack_transport_state_t; -typedef uint64_t jack_unique_t; /**< Unique ID (opaque) */ +typedef jack_uint64_t jack_unique_t; /**< Unique ID (opaque) */ /** * Optional struct jack_position_t fields. @@ -564,16 +572,16 @@ struct _jack_position { int32_t bar; /**< current bar */ int32_t beat; /**< current beat-within-bar */ int32_t tick; /**< current tick-within-beat */ - double bar_start_tick; + jack_double bar_start_tick; float beats_per_bar; /**< time signature "numerator" */ float beat_type; /**< time signature "denominator" */ - double ticks_per_beat; - double beats_per_minute; + jack_double ticks_per_beat; + jack_double beats_per_minute; /* JackPositionTimecode fields: (EXPERIMENTAL: could change) */ - double frame_time; /**< current time in seconds */ - double next_time; /**< next sequential frame_time + jack_double frame_time; /**< current time in seconds */ + jack_double next_time; /**< next sequential frame_time (unless repositioned) */ /* JackBBTFrameOffset fields: */ From 40c4b8710a947b9f418ce1c0db279abe01d43c0b Mon Sep 17 00:00:00 2001 From: Basil Nutmeg Date: Sat, 21 Jul 2012 17:44:01 -0700 Subject: [PATCH 3/5] Make internal types 32/64 clean. Update internal types to have the same layout between 32-bit and 64-bit, using the new alignment macros and types. --- common/JackEngineControl.h | 8 +++++--- common/shm.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/common/JackEngineControl.h b/common/JackEngineControl.h index f6d32f44..254d4a45 100644 --- a/common/JackEngineControl.h +++ b/common/JackEngineControl.h @@ -41,6 +41,8 @@ class JackGraphManager; #define JACK_ENGINE_ROLLING_COUNT 32 #define JACK_ENGINE_ROLLING_INTERVAL 1024 +typedef JACK_ALIGNED_TYPE(UInt64) jack_UInt64; + /*! \brief Engine control in shared memory. */ @@ -81,9 +83,9 @@ struct SERVER_EXPORT JackEngineControl : public JackShmMem float fCPULoad; // For OSX thread - UInt64 fPeriod; - UInt64 fComputation; - UInt64 fConstraint; + jack_UInt64 fPeriod; + jack_UInt64 fComputation; + jack_UInt64 fConstraint; // Timer JackFrameTimer fFrameTimer; diff --git a/common/shm.h b/common/shm.h index 43f420de..1b4ff29d 100644 --- a/common/shm.h +++ b/common/shm.h @@ -153,7 +153,7 @@ extern "C" struct _jack_shm_info { jack_shm_registry_index_t index; /* offset into the registry */ uint32_t size; - union { + JACK_ALIGN(8) 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 */ From b540b2489e395c03e03b3e4d076444d2143e237a Mon Sep 17 00:00:00 2001 From: Basil Nutmeg Date: Sat, 21 Jul 2012 17:54:52 -0700 Subject: [PATCH 4/5] Remove use of packed structs. Remove use of packed structs, now that the infrastructure for consistently aligning types between 32-bit and 64-bit platforms is in place. This fixes crashes on platforms which enforce alignment rules (because there are places in the code where pointers to packed fields are used). Also, it theoretically improves performance, though I haven't actually performed any measurements. ABI implications: jack_latency_range_t and jack_position_t are no longer packed. The layouts of these structs themselves are unmodified, though the layouts of any structs which include these structs as members may be affected. --- common/JackActivationCount.h | 4 ++-- common/JackAtomicArrayState.h | 8 ++++---- common/JackAtomicState.h | 8 ++++---- common/JackClientControl.h | 4 ++-- common/JackConnectionManager.h | 24 ++++++++++++------------ common/JackEngineControl.h | 4 ++-- common/JackEngineProfiling.h | 16 ++++++++-------- common/JackFilters.h | 12 ++++++------ common/JackFrameTimer.h | 8 ++++---- common/JackGraphManager.h | 4 ++-- common/JackPort.h | 4 ++-- common/JackTransportEngine.h | 4 ++-- common/jack/systemdeps.h | 25 +------------------------ common/jack/types.h | 8 ++++---- common/shm.h | 4 ++-- 15 files changed, 57 insertions(+), 80 deletions(-) diff --git a/common/JackActivationCount.h b/common/JackActivationCount.h index 7efc031c..a77e6e6d 100644 --- a/common/JackActivationCount.h +++ b/common/JackActivationCount.h @@ -33,7 +33,7 @@ struct JackClientControl; \brief Client activation counter. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ class JackActivationCount { @@ -74,7 +74,7 @@ class JackActivationCount return fValue; } -} POST_PACKED_STRUCTURE; +}; } // end of namespace diff --git a/common/JackAtomicArrayState.h b/common/JackAtomicArrayState.h index a2c0139d..16d2f19c 100644 --- a/common/JackAtomicArrayState.h +++ b/common/JackAtomicArrayState.h @@ -30,7 +30,7 @@ namespace Jack /*! \brief Counter for CAS */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ struct AtomicArrayCounter { union { @@ -68,7 +68,7 @@ struct AtomicArrayCounter return *this; } -} POST_PACKED_STRUCTURE; +}; #define Counter1(e) (e).info.fLongVal #define GetIndex1(e, state) ((e).info.scounter.fByteVal[state]) @@ -109,7 +109,7 @@ Requirement: // CHECK livelock -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ template class JackAtomicArrayState { @@ -249,7 +249,7 @@ class JackAtomicArrayState WriteNextStateStopAux(state); } -} POST_PACKED_STRUCTURE; +}; } // end of namespace diff --git a/common/JackAtomicState.h b/common/JackAtomicState.h index 1eef4e11..ea166c15 100644 --- a/common/JackAtomicState.h +++ b/common/JackAtomicState.h @@ -31,7 +31,7 @@ namespace Jack \brief Counter for CAS */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ struct AtomicCounter { union { @@ -70,7 +70,7 @@ struct AtomicCounter return *this; } -} POST_PACKED_STRUCTURE; +}; #define Counter(e) (e).info.fLongVal #define CurIndex(e) (e).info.scounter.fShortVal1 @@ -85,7 +85,7 @@ struct AtomicCounter // CHECK livelock -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ template class JackAtomicState { @@ -254,7 +254,7 @@ class JackAtomicState } */ -} POST_PACKED_STRUCTURE; +}; } // end of namespace diff --git a/common/JackClientControl.h b/common/JackClientControl.h index 925f09dd..1bf731d6 100644 --- a/common/JackClientControl.h +++ b/common/JackClientControl.h @@ -34,7 +34,7 @@ namespace Jack \brief Client control possibly in shared memory. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ struct JackClientControl : public JackShmMemAble { char fName[JACK_CLIENT_NAME_SIZE + 1]; @@ -88,7 +88,7 @@ struct JackClientControl : public JackShmMemAble fSessionID = uuid; } -} POST_PACKED_STRUCTURE; +}; } // end of namespace diff --git a/common/JackConnectionManager.h b/common/JackConnectionManager.h index 5041557a..23bd0f88 100644 --- a/common/JackConnectionManager.h +++ b/common/JackConnectionManager.h @@ -36,7 +36,7 @@ struct JackClientControl; \brief Utility class. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ template class JackFixedArray { @@ -117,13 +117,13 @@ class JackFixedArray return fCounter; } -} POST_PACKED_STRUCTURE; +}; /*! \brief Utility class. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ template class JackFixedArray1 : public JackFixedArray { @@ -154,13 +154,13 @@ class JackFixedArray1 : public JackFixedArray } } -} POST_PACKED_STRUCTURE; +}; /*! \brief Utility class. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ template class JackFixedMatrix { @@ -250,13 +250,13 @@ class JackFixedMatrix } -} POST_PACKED_STRUCTURE; +}; /*! \brief Utility class. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ template class JackLoopFeedback { @@ -364,13 +364,13 @@ class JackLoopFeedback return -1; } -} POST_PACKED_STRUCTURE; +}; /*! \brief For client timing measurements. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ struct JackClientTiming { jack_time_t fSignaledAt; @@ -393,7 +393,7 @@ struct JackClientTiming fStatus = NotTriggered; } -} POST_PACKED_STRUCTURE; +}; /*! \brief Connection manager. @@ -407,7 +407,7 @@ struct JackClientTiming */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ class SERVER_EXPORT JackConnectionManager { @@ -487,7 +487,7 @@ class SERVER_EXPORT JackConnectionManager int SuspendRefNum(JackClientControl* control, JackSynchro* table, JackClientTiming* timing, long time_out_usec); void TopologicalSort(std::vector& sorted); -} POST_PACKED_STRUCTURE; +}; } // end of namespace diff --git a/common/JackEngineControl.h b/common/JackEngineControl.h index 254d4a45..c3785198 100644 --- a/common/JackEngineControl.h +++ b/common/JackEngineControl.h @@ -47,7 +47,7 @@ typedef JACK_ALIGNED_TYPE(UInt64) jack_UInt64; \brief Engine control in shared memory. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ struct SERVER_EXPORT JackEngineControl : public JackShmMem { // Shared state @@ -183,7 +183,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 ResetRollingUsecs(); -} POST_PACKED_STRUCTURE; +}; } // end of namespace diff --git a/common/JackEngineProfiling.h b/common/JackEngineProfiling.h index 04fdb953..88be1cd5 100644 --- a/common/JackEngineProfiling.h +++ b/common/JackEngineProfiling.h @@ -37,7 +37,7 @@ namespace Jack \brief Timing stucture for a client. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ struct JackTimingMeasureClient { int fRefNum; @@ -54,13 +54,13 @@ struct JackTimingMeasureClient fStatus((jack_client_state_t)0) {} -} POST_PACKED_STRUCTURE; +}; /*! \brief Timing interval in the global table for a given client */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ struct JackTimingClientInterval { int fRefNum; @@ -74,13 +74,13 @@ struct JackTimingClientInterval fEndInterval(-1) {} -} POST_PACKED_STRUCTURE; +}; /*! \brief Timing stucture for a table of clients. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ struct JackTimingMeasure { unsigned int fAudioCycle; @@ -96,7 +96,7 @@ struct JackTimingMeasure fPrevCycleEnd(0) {} -} POST_PACKED_STRUCTURE; +}; /*! \brief Client timing monitoring. @@ -105,7 +105,7 @@ struct JackTimingMeasure class JackClientInterface; class JackGraphManager; -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ class SERVER_EXPORT JackEngineProfiling { @@ -132,7 +132,7 @@ class SERVER_EXPORT JackEngineProfiling JackTimingMeasure* GetCurMeasure(); -} POST_PACKED_STRUCTURE; +}; } // end of namespace diff --git a/common/JackFilters.h b/common/JackFilters.h index 6b5f0d32..9f57a577 100644 --- a/common/JackFilters.h +++ b/common/JackFilters.h @@ -38,7 +38,7 @@ namespace Jack #define MAX_SIZE 64 - PRE_PACKED_STRUCTURE + /* Note: This class must be kept 32/64 clean! */ struct JackFilter { @@ -64,9 +64,9 @@ namespace Jack return mean / MAX_SIZE; } - } POST_PACKED_STRUCTURE; + }; - PRE_PACKED_STRUCTURE + /* Note: This class must be kept 32/64 clean! */ class JackDelayLockedLoop { @@ -147,9 +147,9 @@ namespace Jack return fCurrentWakeup; } - } POST_PACKED_STRUCTURE; + }; - PRE_PACKED_STRUCTURE + /* Note: This class must be kept 32/64 clean! */ class JackAtomicDelayLockedLoop : public JackAtomicState { public: @@ -213,7 +213,7 @@ namespace Jack return res; } - } POST_PACKED_STRUCTURE; + }; #endif diff --git a/common/JackFrameTimer.h b/common/JackFrameTimer.h index a32e7423..13916e1f 100644 --- a/common/JackFrameTimer.h +++ b/common/JackFrameTimer.h @@ -32,7 +32,7 @@ namespace Jack \brief A structure used for time management. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ class SERVER_EXPORT JackTimer { @@ -69,13 +69,13 @@ class SERVER_EXPORT JackTimer return fCurrentWakeup; } -} POST_PACKED_STRUCTURE; +}; /*! \brief A class using the JackAtomicState to manage jack time. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ class SERVER_EXPORT JackFrameTimer : public JackAtomicState { @@ -97,7 +97,7 @@ class SERVER_EXPORT JackFrameTimer : public JackAtomicState void IncFrameTime(jack_nframes_t buffer_size, jack_time_t callback_usecs, jack_time_t period_usecs); void ReadFrameTime(JackTimer* timer); -} POST_PACKED_STRUCTURE; +}; } // end of namespace diff --git a/common/JackGraphManager.h b/common/JackGraphManager.h index 15f0275f..9c6d8aad 100644 --- a/common/JackGraphManager.h +++ b/common/JackGraphManager.h @@ -36,7 +36,7 @@ namespace Jack \brief Graph manager: contains the connection manager and the port array. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ class SERVER_EXPORT JackGraphManager : public JackShmMem, public JackAtomicState { @@ -137,7 +137,7 @@ class SERVER_EXPORT JackGraphManager : public JackShmMem, public JackAtomicState static JackGraphManager* Allocate(int port_max); static void Destroy(JackGraphManager* manager); -} POST_PACKED_STRUCTURE; +}; } // end of namespace diff --git a/common/JackPort.h b/common/JackPort.h index f7a601ed..4198d83c 100644 --- a/common/JackPort.h +++ b/common/JackPort.h @@ -35,7 +35,7 @@ namespace Jack \brief Base class for port. */ -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ class SERVER_EXPORT JackPort { @@ -113,7 +113,7 @@ class SERVER_EXPORT JackPort int GetRefNum() const; -} POST_PACKED_STRUCTURE; +}; } // end of namespace diff --git a/common/JackTransportEngine.h b/common/JackTransportEngine.h index b6a4ddcf..34846783 100644 --- a/common/JackTransportEngine.h +++ b/common/JackTransportEngine.h @@ -89,7 +89,7 @@ We have: class JackClientInterface; -PRE_PACKED_STRUCTURE +/* Note: This class must be kept 32/64 clean! */ class SERVER_EXPORT JackTransportEngine : public JackAtomicArrayState { @@ -194,7 +194,7 @@ class SERVER_EXPORT JackTransportEngine : public JackAtomicArrayState Date: Wed, 2 Jan 2013 09:32:59 +0100 Subject: [PATCH 5/5] remove packed structs for JackNet. -- see prev commit. --- common/JackNetTool.h | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/common/JackNetTool.h b/common/JackNetTool.h index c622acee..8355cf16 100644 --- a/common/JackNetTool.h +++ b/common/JackNetTool.h @@ -84,7 +84,6 @@ namespace Jack are kept in LITTLE_ENDIAN format (to avoid 2 conversions in the more common LITTLE_ENDIAN <==> LITTLE_ENDIAN connection case). */ - PRE_PACKED_STRUCTURE struct _session_params { char fPacketType[8]; //packet type ('param') @@ -106,7 +105,7 @@ namespace Jack uint32_t fKBps; //KB per second for CELT encoder uint32_t fSlaveSyncMode; //is the slave in sync mode ? uint32_t fNetworkLatency; //network latency - } POST_PACKED_STRUCTURE; + }; //net status ********************************************************************************** @@ -167,7 +166,6 @@ namespace Jack */ - PRE_PACKED_STRUCTURE struct _packet_header { char fPacketType[8]; //packet type ('headr') @@ -180,7 +178,7 @@ namespace Jack uint32_t fCycle; //process cycle counter uint32_t fSubCycle; //midi/audio subcycle counter uint32_t fIsLastPckt; //is it the last packet of a given cycle ('y' or 'n') - } POST_PACKED_STRUCTURE; + }; //net timebase master @@ -205,14 +203,13 @@ namespace Jack \Brief This structure contains transport data to be sent over the network */ - PRE_PACKED_STRUCTURE struct _net_transport_data { uint32_t fNewState; //is it a state change uint32_t fTimebaseMaster; //is there a new timebase master int32_t fState; //current cycle state jack_position_t fPosition; //current cycle position - } POST_PACKED_STRUCTURE; + }; //midi data ***********************************************************************************