From 82d974cc559584fa4458932e928e8d4bde2bc325 Mon Sep 17 00:00:00 2001 From: "Erik S. Chang" Date: Wed, 27 Feb 2013 23:34:20 +0000 Subject: [PATCH] fix Ruby 2.0.0 compatibility --- ChangeLog | 3 +++ ext/lwes_ext/listener.c | 4 ++++ ext/lwes_ext/type_conv.c | 4 ++-- lwes.gemspec | 2 +- test/unit/test_emitter.rb | 7 ++++++- test/unit/test_listener.rb | 8 +++++--- 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index f2cfc5c..1c6a48d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +Version 0.8.5 (erik-s-chang) + * Fix Ruby 2.0.0 compatibility + Version 0.8.4 (erik-s-chang) * prevent -llwes in $LIBS when building local installation diff --git a/ext/lwes_ext/listener.c b/ext/lwes_ext/listener.c index 612bce9..6710501 100644 --- a/ext/lwes_ext/listener.c +++ b/ext/lwes_ext/listener.c @@ -138,10 +138,14 @@ static VALUE listener_recv(int argc, VALUE *argv, VALUE self) args.event = lwes_event_create_no_name(NULL); args.timeout_ms = NIL_P(timeout) ? UINT_MAX : NUM2UINT(timeout); +retry: saved_errno = errno = 0; r = (int)rb_thread_blocking_region(recv_event, &args, RUBY_UBF_IO, 0); if (r >= 0) return lwesrb_wrap_event(cLWES_Event, args.event); + + if (errno == EINTR) + goto retry; saved_errno = errno; (void)lwes_event_destroy(args.event); if (r == -2 && ! NIL_P(timeout)) diff --git a/ext/lwes_ext/type_conv.c b/ext/lwes_ext/type_conv.c index 48fd46a..e34353a 100644 --- a/ext/lwes_ext/type_conv.c +++ b/ext/lwes_ext/type_conv.c @@ -35,7 +35,7 @@ LWES_U_INT_32 lwesrb_uint32(VALUE val) if (tmp != (LWES_U_INT_32)tmp) { const char *s = tmp < 0 ? "negative" : "too big"; - rb_raise(rb_eRangeError, ":uint32 %s: %lli", s, tmp); + rb_raise(rb_eRangeError, ":uint32 %s: %lld", s, tmp); } return (LWES_U_INT_32)tmp; } @@ -46,7 +46,7 @@ LWES_INT_32 lwesrb_int32(VALUE val) if (tmp != (LWES_INT_32)tmp) { const char *s = tmp < 0 ? "small" : "big"; - rb_raise(rb_eRangeError, ":int32 too %s: %lli", s, tmp); + rb_raise(rb_eRangeError, ":int32 too %s: %lld", s, tmp); } return (LWES_INT_32)tmp; } diff --git a/lwes.gemspec b/lwes.gemspec index 1b5ec7d..85b2292 100644 --- a/lwes.gemspec +++ b/lwes.gemspec @@ -1,6 +1,6 @@ Gem::Specification.new do |s| s.name = %q{lwes} - s.version = "0.8.4" + s.version = "0.8.5" s.date = Time.now s.authors = ["Erik S. Chang", "Frank Maritato"] s.email = %q{lwes-devel@lists.sourceforge.net} diff --git a/test/unit/test_emitter.rb b/test/unit/test_emitter.rb index 7c1e2e9..71827f9 100644 --- a/test/unit/test_emitter.rb +++ b/test/unit/test_emitter.rb @@ -35,8 +35,13 @@ class TestEmitter < Test::Unit::TestCase end def test_initialize_with_heartbeat + l = LWES::Listener.new(@options) heartbeat = @options.merge(:heartbeat => 30) - assert_instance_of LWES::Emitter, LWES::Emitter.new(heartbeat) + e = LWES::Emitter.new(heartbeat) + assert_instance_of LWES::Emitter, e + assert_nil e.close + assert_instance_of LWES::Event, l.recv + assert_nil l.close end def test_initialize_no_ttl diff --git a/test/unit/test_listener.rb b/test/unit/test_listener.rb index b27347a..3d24a57 100644 --- a/test/unit/test_listener.rb +++ b/test/unit/test_listener.rb @@ -60,14 +60,15 @@ class TestListener < Test::Unit::TestCase end def test_listen_each_signal - signaled = false - handler = trap(:USR1) { signaled = true } + pipe = IO.pipe + handler = trap(:USR1) { pipe[1].syswrite('.') } @listener = LWES::Listener.new @options @emitter = LWES::Emitter.new @options tmp = [] thr = Thread.new do sleep 0.1 Process.kill :USR1, $$ + assert_equal '.', pipe[0].read(1) @emitter.emit("E1", :hello => "WORLD") :OK end @@ -75,8 +76,9 @@ class TestListener < Test::Unit::TestCase assert thr.join assert_equal :OK, thr.value assert_equal 1, tmp.size - assert_equal "WORLD", tmp[0].to_hash[:hello] + assert_equal "WORLD", tmp[0].to_hash[:hello], tmp ensure trap(:USR1, handler) + pipe.each { |io| io.close } end end if LWES::Listener.method_defined?(:recv) -- 2.11.4.GIT