[zeromq-dev] thread-safe calls?

Chuck Remes cremes.devlist at mac.com
Sat Aug 28 21:08:15 CEST 2010

On Aug 28, 2010, at 1:14 PM, Pieter Hintjens wrote:

> On Sat, Aug 28, 2010 at 7:34 PM, Chuck Remes <cremes.devlist at mac.com> wrote:
>> I am wondering if I am misusing the framework. Briefly, the crash occurs when calling zmq_close from another thread on a socket that is blocked on send/recv. It sometimes asserts on object.cpp line 342, sometimes hangs, sometimes segfaults, etc.
>> I thought it would be safe to call zmq_close on sockets in other threads since calling zmq_term can safely do so. Am I wrong? If so, what is a safe way to signal a blocked socket so it can cleanly shut itself down (without calling zmq_term)?
> Calling close on a socket that is not owned by that thread is not safe
> afaik.  The correct way to signal any socket is to send it a message.

How should sockets be cleaned up from languages that support destructors/finalizers? There will be situations where objects containing sockets will go out of scope and the garbage collector will reap them. At that time, a finalizer may be called to clean up the socket. That call will *always* happen from another thread.

If this can never be safe, then I'll remove my socket finalizers and just leave a finalizer for the context objects.


More information about the zeromq-dev mailing list