On Dec 20, 2011, at 3:03 PM, Morten Møller Riis wrote:

> Hi Guys
> 
> I am having a problem that is driving me crazy.
> 
> It seems to me that the ruby garbage collector and zeromq might not be the 
> best of friends.
> 
> I have an application that uses ZMQ where something like this happens:
> 
> class Client
>       def self.listen
>               @socket = ZMQ::Context.new.socket(ZMQ::UPSTREAM)
>               @socket.bind("tcp://#{IP}:#{MINION_PORT}")
> 
>               while(true)
>                       msg = @socket.recv()
>                       # do something with the message
>               end
>       end
> end


This isn't new for 2.1. I think you are just getting lucky on that other code.

The problem is this line:

>               @socket = ZMQ::Context.new.socket(ZMQ::UPSTREAM)


You are not saving a reference to the context that you just created, so the GC 
will reap it at some point. Change it to:

>               @context = ZMQ::Context.new
>               @socket = @context.socket(ZMQ::UPSTREAM)

And now all will be well with the world.

cr

_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to