about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/dtas/buffer/fiddle_splice.rb3
-rw-r--r--lib/dtas/buffer/splice.rb3
-rw-r--r--test/test_buffer.rb2
3 files changed, 5 insertions, 3 deletions
diff --git a/lib/dtas/buffer/fiddle_splice.rb b/lib/dtas/buffer/fiddle_splice.rb
index ad007eb..d9232cd 100644
--- a/lib/dtas/buffer/fiddle_splice.rb
+++ b/lib/dtas/buffer/fiddle_splice.rb
@@ -84,7 +84,8 @@ module DTAS::Buffer::FiddleSplice # :nodoc:
       targets # our one and only target blocked on write
     else
       @bytes_xfer += s
-      :wait_readable # we want to read more from @to_io soon
+      # s < limit means targets[0] is full
+      s < limit ? targets : :wait_readable
     end
   rescue Errno::EPIPE, IOError => e
     __dst_error(targets[0], e)
diff --git a/lib/dtas/buffer/splice.rb b/lib/dtas/buffer/splice.rb
index e5d17ab..b9957ce 100644
--- a/lib/dtas/buffer/splice.rb
+++ b/lib/dtas/buffer/splice.rb
@@ -39,7 +39,8 @@ module DTAS::Buffer::Splice # :nodoc:
       targets # our one and only target blocked on write
     else
       @bytes_xfer += s
-      :wait_readable # we want to read more from @to_io soon
+      # s < limit means targets[0] is full
+      s < limit ? targets : :wait_readable
     end
   rescue Errno::EPIPE, IOError => e
     __dst_error(targets[0], e)
diff --git a/test/test_buffer.rb b/test/test_buffer.rb
index 54ee584..b89a090 100644
--- a/test/test_buffer.rb
+++ b/test/test_buffer.rb
@@ -62,7 +62,7 @@ class TestBuffer < Testcase
     buf = new_buffer
     r, w = IO.pipe
     buf.wr.write "HIHI"
-    assert_equal :wait_readable, buf.broadcast([w])
+    assert_equal [w], buf.broadcast([w])
     assert_equal 4, buf.bytes_xfer
     tmp = [w]
     r.close