From fc1a60918378a531ce8a6578fb68b727dbdef494 Mon Sep 17 00:00:00 2001 From: Damian Janowski Date: Tue, 20 Mar 2012 14:01:52 -0300 Subject: [PATCH] Don't yield the block on timeouts. --- lib/ost.rb | 2 ++ test/ost_test.rb | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/lib/ost.rb b/lib/ost.rb index 8e944f2..db2b4d2 100644 --- a/lib/ost.rb +++ b/lib/ost.rb @@ -25,6 +25,8 @@ def each(&block) item = @key.brpoplpush(@backup, TIMEOUT) + next unless item + block.call(item) @backup.lpop diff --git a/test/ost_test.rb b/test/ost_test.rb index 35597dc..e0fbb28 100644 --- a/test/ost_test.rb +++ b/test/ost_test.rb @@ -53,6 +53,22 @@ def enqueue(id) assert_equal ["1"], results end + test "doesn't yield the block on timeout" do |redis| + results = [] + + Thread.new do + sleep 2 + enqueue(1) + end + + ost do |item| + results << item + end + + assert_equal [], Ost[:events].items + assert_equal ["1"], results + end + test "halt processing a queue" do Thread.new do sleep 0.5