[zeromq-dev] random crashes on zmq_ctx_term() when there is a monitored socket

Peter Kleiweg pkleiweg at xs4all.nl
Sat Nov 8 13:41:34 CET 2014


Does anyone know of a solution for this?
How do I close a monitor?


Peter Kleiweg schreef op de 31e dag van de wijnmaand van het jaar 2014:

> 
> Situation:
> 
>   1. create a context
>   2. create socket
>   3. put monitor on socket with zmq_socket_monitor()
>   4. socket: connect to address
>   5. socket: remove connection
>   6. terminate the context
> 
> Repeat this often enough, and either the program will hang at 
> step 6, or crash with an error at step 6. The errors vary. These 
> are the ones I have seen:
> 
>      Bad file descriptor (signaler.cpp:269)
>      Assertion failed: pfd.revents & POLLIN (signaler.cpp:226)
>      Invalid argument (mutex.hpp:99)
>      Resource temporarily unavailable (signaler.cpp:269)
>      Segmentation fault
> 
> The problem disappears if you have a thread (or goroutine) 
> actually reading the messages from the monitor, and if you 
> insert a sleep (0.1 seconds) between steps 5 and 6 as well.
> 
> Problem observed with ZeroMQ 3.2, 4.0 and 4.1, on linux/amd64, 
> using the Go interfaces zmq3 and zmq4. 
> 
> Please see details and code examples here:
> 
>      https://github.com/pebbe/zmq4/issues/28
> 
> My guess of what is going on is this: The monitor is running in
> its own thread, while zmq_ctx_term() tries to close the
> monitoring socket in the main thread. Thus, the socket would be
> used in two threads at once, and since sockets aren't
> thread-safe, a crash follows.
> 
> 
> 



-- 
Peter Kleiweg
http://pkleiweg.home.xs4all.nl/



More information about the zeromq-dev mailing list