[zeromq-dev] Incompatible iterator types in xrep.cpp

Tore Halvorsen tore.halvorsen at gmail.com
Wed May 4 11:49:28 CEST 2011

(Using latest 3.0 source : xrep.cpp - lines 98-112)

void zmq::xrep_t::terminated (reader_t *pipe_)
    for (inpipes_t::iterator it = inpipes.begin (); it != inpipes.end ();
          ++it) {
        if (it->reader == pipe_) {
            inpipes.erase (it);
            if ((inpipes_t::size_type) (it - inpipes.begin ()) < current_in)
            if (terminating)
                unregister_term_ack ();
    zmq_assert (false);

I think that comparing an erased iterator isn't strictly valid.
Erase should probably be done after decreasing current_in.

To be honest, I'm not quite sure what this function does, but
accessing iterators after erase is usually not a good idea.

Eld på åren og sol på eng gjer mannen fegen og fjåg. [Jøtul]
<demo> 2011 Tore Halvorsen || +052 0553034554

More information about the zeromq-dev mailing list