summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2010-09-19 21:40:26 +0200
committerMartin Sustrik <sustrik@250bpm.com>2010-09-19 21:40:26 +0200
commit938689a49128ca17d2bc9662f311c6dbb70240db (patch)
treed709fdb4b0fb2c7b8fcb22f58e53c7f7d9eb16af
parent471013a59fc7f41b694c0bc0b11a459d4c19700d (diff)
synchronisation problem fixed in ctx_t
-rw-r--r--src/ctx.cpp2
-rw-r--r--src/zmq_init.cpp5
2 files changed, 6 insertions, 1 deletions
diff --git a/src/ctx.cpp b/src/ctx.cpp
index 267f7d0..b17fac0 100644
--- a/src/ctx.cpp
+++ b/src/ctx.cpp
@@ -108,8 +108,10 @@ int zmq::ctx_t::terminate ()
{
// First send stop command to sockets so that any
// blocking calls are interrupted.
+ slot_sync.lock ();
for (sockets_t::size_type i = 0; i != sockets.size (); i++)
sockets [i]->stop ();
+ slot_sync.unlock ();
// Close the logging infrastructure.
log_sync.lock ();
diff --git a/src/zmq_init.cpp b/src/zmq_init.cpp
index 3c8f288..ee5741a 100644
--- a/src/zmq_init.cpp
+++ b/src/zmq_init.cpp
@@ -139,7 +139,10 @@ void zmq::zmq_init_t::finalise_initialisation ()
if (sent && received) {
// If we know what session we belong to, it's easy, just send the
- // engine to that session and destroy the init object.
+ // engine to that session and destroy the init object. Note that we
+ // know about the session only if this object is owned by it. Thus,
+ // lifetime of this object in contained in the lifetime of the session
+ // so the pointer cannot become invalid without notice.
if (session) {
engine->unplug ();
send_attach (session, engine, peer_identity, true);