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

Pieter Hintjens ph at imatix.com
Sat Nov 8 14:09:55 CET 2014


Indeed, this looks like two threads trying to work with the same socket.

Can we reproduce this in C?

On Sat, Nov 8, 2014 at 1:41 PM, Peter Kleiweg <pkleiweg at xs4all.nl> wrote:
>
> 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/
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev



More information about the zeromq-dev mailing list