[zeromq-dev] Assertion failed: (prefetched_msg.flags () & msg_t::more) == 0 (../src/stream.cpp:220)
Laurent Alebarde
l.alebarde at free.fr
Sat Feb 8 09:16:23 CET 2014
Hi Devs,
I assume I have done something wrong, but I don't know what. Does
somebody has an idea what can cause such failure please ?
The context is a poll of three sockets:
void *frontend = zmq_socket (ctx, ZMQ_ROUTER);
assert (frontend);
int rc = zmq_bind (frontend, "tcp://127.0.0.1:9999");
assert (rc == 0);
// Backend socket talks to workers over inproc *-->**0x7fffec001830*
void *backend = zmq_socket (ctx, ZMQ_STREAM);
assert (backend);
rc = zmq_bind (backend, "inproc://backend");
assert (rc == 0);
// Control socket receives terminate command from main over inproc
void *control = zmq_socket (ctx, ZMQ_SUB);
assert (control);
rc = zmq_setsockopt (control, ZMQ_SUBSCRIBE, "", 0);
assert (rc == 0);
rc = zmq_connect (control, "inproc://control");
assert (rc == 0);
The event leading to that is a CURVE/DEALER worker connected to
"inproc://backend" and sending its first message.
Cheers,
Laurent
*Assertion failed: (prefetched_msg.flags () & msg_t::more) == 0
(../src/stream.cpp:220)*
Calls from top to bottom (error at the end):
From:
src/zmp.cpp
int zmq_poll (zmq_pollitem_t *items_, int nitems_, long timeout_)
Name : items_
Details:{{socket = 0x7fffec0008c0, fd = 0, events = 0, revents =
0}, {socket = 0x7fffec001830, fd = 0, events = 1, revents = 0}, {socket
= 0x7fffec002270, fd = 0, events = 1, revents = 0}}
Name : nitems_
Details:3
Name : timeout_
Details:-1
Note 1: events in the 1st socket has been intentionnaly set to 0 to not
poll this one.
Note2: The socket addresses are the ones I have in the application.
When it calls (i == 1):
if (zmq_getsockopt (items_ [i].socket, ZMQ_EVENTS, &zmq_events,
&zmq_events_size) == -1) {
Then:
int zmq_getsockopt (void *s_, int option_, void *optval_, size_t
*optvallen_)
Name : s_
Details:0x7fffec001830
Name : option_
Details:15
When it calls:
int result = s->getsockopt (option_, optval_, optvallen_);
Then:
int zmq::socket_base_t::getsockopt (int option_, void *optval_,
size_t *optvallen_)
When it calls:
if (has_in ())
Then:
bool zmq::socket_base_t::has_in ()
{
return xhas_in ();
}
Then:
bool zmq::stream_t::xhas_in ()
When it execute:
zmq_assert ((prefetched_msg.flags () & msg_t::more) == 0);
Name : prefetched_msg
Details:{*u = {base =* {unused =
"\\001\\000\\000\\000\\377\\177\\000\\000\\240\\006w\\367\\377\\177\\000\\000@\\353\\377\\347\\377\\177\\000\\000\\247\\304F\\000\\000\\004",
type = 101 'e', *flags = 1* '\\001'}, vsm = {data =
"\\001\\000\\000\\000\\377\\177\\000\\000\\240\\006w\\367\\377\\177\\000\\000@\\353\\377\\347\\377\\177\\000\\000\\247\\304F\\000",
size = 4 '\\004', type = 101 'e', flags = 1 '\\001'}, lmsg = {content =
0x7fff00000001, unused =
"\\240\\006w\\367\\377\\177\\000\\000@\\353\\377\\347\\377\\177\\000\\000\\247\\304F\\000\\000\\004",
type = 101 'e', flags = 1 '\\001'}, cmsg = {data = 0x7fff00000001, size
= 140737345160864, unused =
"@\\353\\377\\347\\377\\177\\000\\000\\247\\304F\\000\\000\\004", type =
101 'e', flags = 1 '\\001'}, delimiter = {unused =
"\\001\\000\\000\\000\\377\\177\\000\\000\\240\\006w\\367\\377\\177\\000\\000@\\353\\377\\347\\377\\177\\000\\000\\247\\304F\\000\\000\\004",
type = 101 'e', flags = 1 '\\001'}}}
*msg_t::more = 1*
Then:
unsigned char zmq::msg_t::flags ()
{
return u.base.flags;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20140208/ff5af4c4/attachment.htm>
More information about the zeromq-dev
mailing list