Commit ac149816 authored by Doron Somech's avatar Doron Somech Committed by GitHub

Merge pull request #2177 from bluca/alignment

Problem: pointer union for zmq_msg_t is a hack
parents 0d032c99 df367a66
...@@ -229,10 +229,21 @@ ZMQ_EXPORT int zmq_ctx_destroy (void *context); ...@@ -229,10 +229,21 @@ ZMQ_EXPORT int zmq_ctx_destroy (void *context);
/* 0MQ message definition. */ /* 0MQ message definition. */
/******************************************************************************/ /******************************************************************************/
/* union here ensures correct alignment on architectures that require it, e.g. /* Some architectures, like sparc64 and some variants of aarch64, enforce pointer
* SPARC * alignment and raise sigbus on violations. Make sure applications allocate
* zmq_msg_t on addresses aligned on a pointer-size boundary to avoid this issue.
*/ */
typedef union zmq_msg_t {unsigned char _ [64]; void *p; } zmq_msg_t; typedef struct zmq_msg_t {
#if defined (__GNUC__) || defined ( __INTEL_COMPILER) || \
(defined (__SUNPRO_C) && __SUNPRO_C >= 0x590) || \
(defined (__SUNPRO_CC) && __SUNPRO_CC >= 0x590)
unsigned char _ [64] __attribute__ ((aligned (sizeof (void *))));
#elif defined(_MSC_VER)
__declspec (align (sizeof (void *))) unsigned char _ [64];
#else
unsigned char _ [64];
#endif
} zmq_msg_t;
typedef void (zmq_free_fn) (void *data, void *hint); typedef void (zmq_free_fn) (void *data, void *hint);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment