diff options
author | Eric Wong <e@80x24.org> | 2016-07-19 21:47:01 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-07-19 21:58:42 +0000 |
commit | 7a211796fd643abf14692cab0b76e97d850219a4 (patch) | |
tree | 29c30301563edb3b3446fb193082870d2729362c /lib | |
parent | c97b5254d6cc50264786270cdd09ed9485a5bec6 (diff) | |
download | yahns-7a211796fd643abf14692cab0b76e97d850219a4.tar.gz |
All of our wbuf code assumes we append to existing buffers (files) since sendfile cannot deal otherwise. We also follow this pattern for StringIO to avoid extra data copies.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/yahns/wbuf.rb | 1 | ||||
-rw-r--r-- | lib/yahns/wbuf_lite.rb | 7 |
2 files changed, 5 insertions, 3 deletions
diff --git a/lib/yahns/wbuf.rb b/lib/yahns/wbuf.rb index 583df10..3abc5f9 100644 --- a/lib/yahns/wbuf.rb +++ b/lib/yahns/wbuf.rb @@ -58,6 +58,7 @@ class Yahns::Wbuf # :nodoc: end until @busy @tmpio ||= Yahns::TmpIO.new(c.class.output_buffer_tmpdir) + # n.b.: we rely on O_APPEND in TmpIO, here @sf_count += String === buf ? @tmpio.write(buf) : wbuf_writev(buf) # we spent some time copying to the FS, try to write to diff --git a/lib/yahns/wbuf_lite.rb b/lib/yahns/wbuf_lite.rb index 1902ce7..8a93ad1 100644 --- a/lib/yahns/wbuf_lite.rb +++ b/lib/yahns/wbuf_lite.rb @@ -33,6 +33,7 @@ class Yahns::WbufLite # :nodoc: end until @busy @tmpio ||= StringIO.new(''.dup) # relies on encoding: binary above + @tmpio.seek(0, 2) # fake O_APPEND behavior @sf_count += @tmpio.write(buf) # we spent some time copying to the FS, try to write to @@ -45,12 +46,12 @@ class Yahns::WbufLite # :nodoc: @busy = rv return rv else - raise "BUG: #{rv.nil? ? "EOF" : rv.inspect} on tmpio " \ + raise "BUG: #{rv.nil? ? 'EOF' : rv.inspect} on " + "tmpio.size=#{@tmpio.size} " \ "sf_offset=#@sf_offset sf_count=#@sf_count" end while @sf_count > 0 - # we're all caught up, try to prevent dirty data from getting flushed - # to disk if we can help it. + # we're all caught up, try to save some memory if we can help it. wbuf_abort @sf_offset = 0 @busy = false |