From 9c2740d9fad86fb3b983ba30cde10b4cf5b4c7cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uli=20K=C3=B6hler?= Date: Sun, 18 Aug 2013 22:50:50 +0200 Subject: [PATCH] Minor fixes to doc ; added zmq_msg_init_data() assert preventing deferred segfault --- src/msg.cpp | 6 ++++-- src/msg.hpp | 5 ++++- src/zmq.cpp | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/msg.cpp b/src/msg.cpp index 2fc2274f..0b03144f 100644 --- a/src/msg.cpp +++ b/src/msg.cpp @@ -58,7 +58,7 @@ int zmq::msg_t::init_size (size_t size_) u.lmsg.flags = 0; u.lmsg.content = (content_t*) malloc (sizeof (content_t) + size_); - if (!u.lmsg.content) { + if (unlikely (!u.lmsg.content)) { errno = ENOMEM; return -1; } @@ -75,7 +75,9 @@ int zmq::msg_t::init_size (size_t size_) int zmq::msg_t::init_data (void *data_, size_t size_, msg_free_fn *ffn_, void *hint_) { - // Initialize constant message if there's no need to deallocate + // If data is NULL and size is not 0, a segfault + // would occur once the data is accessed + assert (data_ != NULL || size_ == 0); if(ffn_ == NULL) { u.cmsg.type = type_cmsg; u.cmsg.flags = 0; diff --git a/src/msg.hpp b/src/msg.hpp index bc0a9376..caa193f6 100644 --- a/src/msg.hpp +++ b/src/msg.hpp @@ -44,7 +44,7 @@ namespace zmq { public: - // Mesage flags. + // Message flags. enum { more = 1, @@ -105,8 +105,11 @@ namespace zmq enum type_t { type_min = 101, + // VSM messages store the content in the message itself type_vsm = 101, + // LMSG messages store the content in malloc-ed memory type_lmsg = 102, + // Delimiter messages are used in envelopes type_delimiter = 103, // CMSG messages point to constant data type_cmsg = 104, diff --git a/src/zmq.cpp b/src/zmq.cpp index def0ba91..ff3e60fa 100644 --- a/src/zmq.cpp +++ b/src/zmq.cpp @@ -539,7 +539,7 @@ int zmq_recviov (void *s_, iovec *a_, size_t *count_, int flags_) a_[i].iov_len = zmq_msg_size (&msg); a_[i].iov_base = malloc(a_[i].iov_len); - if (!a_[i].iov_base) { + if (unlikely (!a_[i].iov_base)) { errno = ENOMEM; return -1; }