diff options
-rw-r--r-- | src/zmq_init.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/zmq_init.cpp b/src/zmq_init.cpp index 5bf6070..3c8f288 100644 --- a/src/zmq_init.cpp +++ b/src/zmq_init.cpp @@ -153,14 +153,18 @@ void zmq::zmq_init_t::finalise_initialisation () zmq_assert (socket); // We have no associated session. If the peer has no identity we'll - // create a transient session for the connection. + // create a transient session for the connection. Note that + // seqnum is incremented to account for attach command before the + // session is launched. That way we are sure it won't terminate before + // being attached. if (peer_identity [0] == 0) { session = new (std::nothrow) transient_session_t (io_thread, socket, options); zmq_assert (session); + session->inc_seqnum (); launch_sibling (session); engine->unplug (); - send_attach (session, engine, peer_identity, true); + send_attach (session, engine, peer_identity, false); engine = NULL; terminate (); return; @@ -179,13 +183,17 @@ void zmq::zmq_init_t::finalise_initialisation () return; } - // There's no such named session. We have to create one. + // There's no such named session. We have to create one. Note that + // seqnum is incremented to account for attach command before the + // session is launched. That way we are sure it won't terminate before + // being attached. session = new (std::nothrow) named_session_t (io_thread, socket, options, peer_identity); zmq_assert (session); + session->inc_seqnum (); launch_sibling (session); engine->unplug (); - send_attach (session, engine, peer_identity, true); + send_attach (session, engine, peer_identity, false); engine = NULL; terminate (); return; |