Rinda::RingFinger.primary broken on 1.9?

The following code correctly errors (with RingNotFound) on Ruby 1.8.6
and 1.8.7, but hangs forever on 1.9.2 and 1.9.3:

  require 'rinda/ring'
  DRb.start_service
  Rinda::RingFinger.primary

This behavior is consistent on Windows 7 and Linux (both RH 5.6 and
CentOS 5.6). Anyone have an idea what's going on?

Thanks,
Hubert

···

--
Posted via http://www.ruby-forum.com/.

Hi, Hubert-san.

Thank you for the report.
It's my bug.

Please try this patch:

require 'rinda/ring'

module Rinda
  class RingFinger
    def lookup_ring_any(timeout=5)
      queue = Queue.new

      th = Thread.new do
  self.lookup_ring(timeout) do |ts|
    queue.push(ts)
  end
  queue.push(nil)
      end

      @primary = queue.pop
      raise('RingNotFound') if @primary.nil?
      while it = queue.pop
        @rings.push(it)
      end

      @primary
    end
  end
end

DRb.start_service
Rinda::RingFinger.primary

···

On 2012/05/08, at 2:04, Hubert Lee <lists@ruby-forum.com> wrote:

The following code correctly errors (with RingNotFound) on Ruby 1.8.6
and 1.8.7, but hangs forever on 1.9.2 and 1.9.3:

require 'rinda/ring'
DRb.start_service
Rinda::RingFinger.primary

This behavior is consistent on Windows 7 and Linux (both RH 5.6 and
CentOS 5.6). Anyone have an idea what's going on?

Thanks,
Hubert

--
Posted via http://www.ruby-forum.com/\.

Hi, Hubert-san.

It's a bug.
I fixed it in svn.

Index: lib/rinda/ring.rb

···

===================================================================
--- lib/rinda/ring.rb (revision 35596)
+++ lib/rinda/ring.rb (working copy)
@@ -203,13 +203,17 @@
           queue.push(ts)
         end
         queue.push(nil)
+ end
+
+ @primary = queue.pop
+ raise('RingNotFound') if @primary.nil?
+
+ Thread.new do
         while it = queue.pop
           @rings.push(it)
         end
       end

- @primary = queue.pop
- raise('RingNotFound') if @primary.nil?
       @primary
     end

On 2012/05/08, at 2:04, Hubert Lee wrote:

The following code correctly errors (with RingNotFound) on Ruby 1.8.6
and 1.8.7, but hangs forever on 1.9.2 and 1.9.3:

require 'rinda/ring'
DRb.start_service
Rinda::RingFinger.primary

This behavior is consistent on Windows 7 and Linux (both RH 5.6 and
CentOS 5.6). Anyone have an idea what's going on?

Thanks,
Hubert

--
Posted via http://www.ruby-forum.com/\.

That fixes it! Thanks!

Regards,
Hubert

···

--
Posted via http://www.ruby-forum.com/.