From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.9 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00 shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: yahns-public@yhbt.net Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 8104F20410 for ; Tue, 1 Dec 2015 03:48:42 +0000 (UTC) From: Eric Wong To: yahns-public@yhbt.net Subject: [PATCH] test_wbuf: deal with proper zero-copy for Unix sockets Date: Tue, 1 Dec 2015 03:48:42 +0000 Message-Id: <20151201034842.25851-1-e@80x24.org> List-Id: 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(-) 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 } -- EW