diff options
| -rw-r--r-- | src/xrep.cpp | 13 | 
1 files changed, 10 insertions, 3 deletions
diff --git a/src/xrep.cpp b/src/xrep.cpp index 9c5aa44..f8565de 100644 --- a/src/xrep.cpp +++ b/src/xrep.cpp @@ -218,6 +218,7 @@ int xs::xrep_t::xrecv (msg_t *msg_, int flags_)          if (msg_->size () != 0) {              //  Actual change of the identity. +            bool changed = false;              outpipes_t::iterator it = outpipes.begin ();              while (it != outpipes.end ()) {                  if (it->second.pipe == pipe) { @@ -226,13 +227,19 @@ int xs::xrep_t::xrecv (msg_t *msg_, int flags_)                      pipe->set_identity (identity);                      outpipes.erase (it);                      outpipe_t outpipe = {pipe, true}; -                    it = outpipes.insert (outpipes_t::value_type (identity, -                        outpipe)).first; +                    if (!outpipes.insert (outpipes_t::value_type (identity, +                        outpipe)).second) { + +                        //  Duplicate identity. +                        //  TODO: Drop the new connection. +                        xs_assert (false); +                    } +                    changed = true;                      break;                  }                  ++it;              } -            xs_assert (it != outpipes.end ()); +            xs_assert (changed);          }      }  | 
