mirror of
https://github.com/zeromq/libzmq.git
synced 2025-01-19 08:46:44 +01:00
VSM data are aligned to 32/64 bit boundary
Till now the VSM buffer was aligned to 16 bit boundary which could possibly cause problems on RISC architectures when accessing the message data in unsafe manner. Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This commit is contained in:
parent
1526ff638c
commit
aa2150c25c
@ -39,10 +39,6 @@ namespace zmq
|
||||
// Commands in pipe per allocation event.
|
||||
command_pipe_granularity = 16,
|
||||
|
||||
// Size in bytes of the largest message that is still copied around
|
||||
// rather than being reference-counted.
|
||||
max_vsm_size = 29,
|
||||
|
||||
// Determines how often does socket poll for new commands when it
|
||||
// still has unprocessed messages to handle. Thus, if it is set to 100,
|
||||
// socket will process 100 inbound messages before doing the poll.
|
||||
|
@ -19,6 +19,7 @@
|
||||
*/
|
||||
|
||||
#include "msg.hpp"
|
||||
#include "../include/zmq.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
@ -29,6 +30,11 @@
|
||||
#include "likely.hpp"
|
||||
#include "err.hpp"
|
||||
|
||||
// Check whether the sizes of public representation of the message (zmq_msg_t)
|
||||
// and private represenation of the message (zmq::msg_t) match.
|
||||
typedef char zmq_msg_size_check
|
||||
[2 * ((sizeof (zmq::msg_t) == sizeof (zmq_msg_t)) != 0) - 1];
|
||||
|
||||
bool zmq::msg_t::check ()
|
||||
{
|
||||
return u.base.type >= type_min && u.base.type <= type_max;
|
||||
|
13
src/msg.hpp
13
src/msg.hpp
@ -77,6 +77,10 @@ namespace zmq
|
||||
|
||||
private:
|
||||
|
||||
// Size in bytes of the largest message that is still copied around
|
||||
// rather than being reference-counted.
|
||||
enum {max_vsm_size = 29};
|
||||
|
||||
// Shared message buffer. Message data are either allocated in one
|
||||
// continuous block along with this structure - thus avoiding one
|
||||
// malloc/free pair or they are stored in used-supplied memory.
|
||||
@ -109,21 +113,24 @@ namespace zmq
|
||||
// the union.
|
||||
union {
|
||||
struct {
|
||||
unsigned char unused [max_vsm_size + 1];
|
||||
unsigned char type;
|
||||
unsigned char flags;
|
||||
} base;
|
||||
struct {
|
||||
unsigned char data [max_vsm_size];
|
||||
unsigned char size;
|
||||
unsigned char type;
|
||||
unsigned char flags;
|
||||
unsigned char size;
|
||||
unsigned char data [max_vsm_size];
|
||||
} vsm;
|
||||
struct {
|
||||
content_t *content;
|
||||
unsigned char unused [max_vsm_size + 1 - sizeof (content_t*)];
|
||||
unsigned char type;
|
||||
unsigned char flags;
|
||||
content_t *content;
|
||||
} lmsg;
|
||||
struct {
|
||||
unsigned char unused [max_vsm_size + 1];
|
||||
unsigned char type;
|
||||
unsigned char flags;
|
||||
} delimiter;
|
||||
|
Loading…
x
Reference in New Issue
Block a user