[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