diff --git a/perf/c/local_lat.c b/perf/c/local_lat.c index c65d4b38..81a2e0c8 100644 --- a/perf/c/local_lat.c +++ b/perf/c/local_lat.c @@ -52,19 +52,24 @@ int main (int argc, char *argv []) rc = zmq_bind (s, bind_to); assert (rc == 0); + rc = zmq_msg_init (&msg); + assert (rc == 0); + for (i = 0; i != roundtrip_count; i++) { - rc = zmq_msg_init (&msg); - assert (rc == 0); rc = zmq_recv (s, &msg, 0); assert (rc == 0); assert (zmq_msg_size (&msg) == message_size); rc = zmq_send (s, &msg, 0); assert (rc == 0); - rc = zmq_msg_close (&msg); - assert (rc == 0); } + rc = zmq_msg_close (&msg); + assert (rc == 0); + sleep (1); + rc = zmq_term (ctx); + assert (rc == 0); + return 0; } diff --git a/perf/c/local_thr.c b/perf/c/local_thr.c index b58fac3a..64c492df 100644 --- a/perf/c/local_thr.c +++ b/perf/c/local_thr.c @@ -90,7 +90,10 @@ int main (int argc, char *argv []) printf ("message size: %d [B]\n", (int) message_size); printf ("message count: %d\n", (int) message_count); printf ("mean throughput: %d [msg/s]\n", (int) throughput); - printf ("mean throughput: %3f [Mb/s]\n", (double) megabits); + printf ("mean throughput: %.3f [Mb/s]\n", (double) megabits); + + rc = zmq_term (ctx); + assert (rc == 0); return 0; } diff --git a/perf/c/remote_lat.c b/perf/c/remote_lat.c index e99da2ea..32329b88 100644 --- a/perf/c/remote_lat.c +++ b/perf/c/remote_lat.c @@ -59,18 +59,20 @@ int main (int argc, char *argv []) rc = gettimeofday (&start, NULL); assert (rc == 0); + rc = zmq_msg_init_size (&msg, message_size); + assert (rc == 0); + for (i = 0; i != roundtrip_count; i++) { - rc = zmq_msg_init_size (&msg, message_size); - assert (rc == 0); rc = zmq_send (s, &msg, 0); assert (rc == 0); rc = zmq_recv (s, &msg, 0); assert (rc == 0); assert (zmq_msg_size (&msg) == message_size); - rc = zmq_msg_close (&msg); - assert (rc == 0); } + rc = zmq_msg_close (&msg); + assert (rc == 0); + rc = gettimeofday (&end, NULL); assert (rc == 0); @@ -83,7 +85,10 @@ int main (int argc, char *argv []) printf ("message size: %d [B]\n", (int) message_size); printf ("roundtrip count: %d\n", (int) roundtrip_count); - printf ("average latency: %3f [us]\n", (double) latency); + printf ("average latency: %.3f [us]\n", (double) latency); + + rc = zmq_term (ctx); + assert (rc == 0); return 0; } diff --git a/perf/c/remote_thr.c b/perf/c/remote_thr.c index d542b1e9..1010bc97 100644 --- a/perf/c/remote_thr.c +++ b/perf/c/remote_thr.c @@ -63,5 +63,8 @@ int main (int argc, char *argv []) sleep (10); + rc = zmq_term (ctx); + assert (rc == 0); + return 0; } diff --git a/perf/cpp/local_thr.cpp b/perf/cpp/local_thr.cpp index e328117f..3e961dea 100644 --- a/perf/cpp/local_thr.cpp +++ b/perf/cpp/local_thr.cpp @@ -71,7 +71,7 @@ int main (int argc, char *argv []) printf ("message size: %d [B]\n", (int) message_size); printf ("message count: %d\n", (int) message_count); printf ("mean throughput: %d [msg/s]\n", (int) throughput); - printf ("mean throughput: %3f [Mb/s]\n", (double) megabits); + printf ("mean throughput: %.3f [Mb/s]\n", (double) megabits); return 0; } diff --git a/perf/cpp/remote_lat.cpp b/perf/cpp/remote_lat.cpp index 3472fd86..169ed1e5 100644 --- a/perf/cpp/remote_lat.cpp +++ b/perf/cpp/remote_lat.cpp @@ -64,7 +64,7 @@ int main (int argc, char *argv []) printf ("message size: %d [B]\n", (int) message_size); printf ("roundtrip count: %d\n", (int) roundtrip_count); - printf ("average latency: %3f [us]\n", (double) latency); + printf ("average latency: %.3f [us]\n", (double) latency); return 0; } diff --git a/src/session.cpp b/src/session.cpp index ef17d6d5..ac2dd127 100644 --- a/src/session.cpp +++ b/src/session.cpp @@ -36,11 +36,8 @@ zmq::session_t::session_t (object_t *parent_, socket_base_t *owner_, zmq::session_t::~session_t () { - // Ask associated pipes to terminate. - if (in_pipe) - in_pipe->term (); - if (out_pipe) - out_pipe->term (); + zmq_assert (!in_pipe); + zmq_assert (!out_pipe); } bool zmq::session_t::read (::zmq_msg_t *msg_) @@ -82,6 +79,7 @@ void zmq::session_t::attach_inpipe (reader_t *pipe_) active = true; in_pipe->set_endpoint (this); } + void zmq::session_t::attach_outpipe (writer_t *pipe_) { zmq_assert (!out_pipe); @@ -141,6 +139,16 @@ void zmq::session_t::process_unplug () bool ok = owner->unregister_session (name.c_str ()); zmq_assert (ok); + // Ask associated pipes to terminate. + if (in_pipe) { + in_pipe->term (); + in_pipe = NULL; + } + if (out_pipe) { + out_pipe->term (); + out_pipe = NULL; + } + if (engine) { engine->unplug (); delete engine;