It seems that the cause is the use of ZMQ_STREAM with inproc ?


Le 08/02/2014 09:16, Laurent Alebarde a écrit :
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;
}











_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to