[zeromq-dev] Erlang Ports and zmq_poll

Martin Sustrik sustrik at 250bpm.com
Sun Jul 25 09:59:29 CEST 2010


Hi Serge,

> While applying Chris's patch based on github.com/sustrik/zeromq2 to 
> erlzmq I noticed that zmq_term() call blocks the thread running Erlang 
> VM.  I saw on this mailing list someone else sending a patch for this 
> issue and that the patch was applied:
> http://github.com/sustrik/zeromq2/commit/11891ddd5577321a351a1850d28478e97f4b9162
> 
> but it doesn't seem to solve this particular problem.
> 
> I haven't spent to much time to trace the issue in zmq code base beyond 
> the fact that I see the execution point is spinning inside
> 
> zmq::ctx_t::~ctx_t () {
>     ...
>     while (!zombies.empty()) {
>          dezombity();
>     }
>     ...
> }
> 
> and I also see that while the value of ctx_t::terminated is true, inside 
> dezombify() sockets in the zombies list have terminated value equal to 
> false.
> 
> It seems to me that inside zmq::ctx_t::dezombify() the zomby's 
> terminated flag should respect the value of ctx_t::terminated, and 
> zmq::socket_base_t::dezombify() should return true in that case (which 
> is currently ignored when calling process_commands(false, false) inside 
> that function.
> 
> It looks like a bug to me, though I don't know implications of this 
> change on other termination scenarios.  If the description above is not 
> clear, I can submit a patch.

It a bug, but the real cause is much more complex. Actually, shutdown is 
the most complex subsystem of 0MQ so if you want to tackle with it be 
prepared to spend a lot of time and brain-twisting on it.

In any case, finishing "0mq socket migration" work is my top priority 
atm, so it will be hopefully fixed soon.

Martin



More information about the zeromq-dev mailing list