From a6d4cb930e852afd3d703ef13a692f941c9ff7bb Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 1 Dec 2015 03:39:16 +0000 Subject: test_wbuf: deal with proper zero-copy for Unix sockets Linux 4.2 gained the ability to do true zero-copy sendfile support for Unix sockets; so buffer space is accounted differently. Previously Linux only avoided copies in userspace when doing sendfile for Unix sockets, not internally within the kernel. This kernel change has no bearing on normal code which would need to account for concurrent draining by the client; only test code designed to create a failure condition. --- test/test_wbuf.rb | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/test_wbuf.rb b/test/test_wbuf.rb index 0eacb08..0d7959c 100644 --- a/test/test_wbuf.rb +++ b/test/test_wbuf.rb @@ -71,8 +71,17 @@ class TestWbuf < Testcase end while true end wbuf = Yahns::Wbuf.new([], true, Dir.tmpdir, :wait_writable) - assert_equal :wait_writable, wbuf.wbuf_write(a, buf) - assert_equal :wait_writable, wbuf.wbuf_flush(a) + + rv1 = wbuf.wbuf_write(a, buf) + rv2 = wbuf.wbuf_flush(a) + case rv1 + when nil + assert_equal true, rv2, 'some kernels succeed with real sendfile' + when :wait_writable + assert_equal :wait_writable, rv2, 'some block on sendfile' + else + flunk "unexpected from wbuf_write/flush: #{rv1.inspect} / #{rv2.inspect}" + end # drain the buffer Timeout.timeout(10) { b.read(b.nread) until b.nread == 0 } -- cgit v1.2.3-24-ge0c7