diff options
Diffstat (limited to 'lib/dtas/writable_iter.rb')
-rw-r--r-- | lib/dtas/writable_iter.rb | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/dtas/writable_iter.rb b/lib/dtas/writable_iter.rb index 1fd65eb..2355352 100644 --- a/lib/dtas/writable_iter.rb +++ b/lib/dtas/writable_iter.rb @@ -4,9 +4,24 @@ require_relative '../dtas' module DTAS::WritableIter # :nodoc: attr_accessor :on_writable + # we may use the ready_write flag to avoid an extra IO.select + attr_accessor :ready_write def writable_iter_init + @mark_writable = proc { @ready_write = true } @on_writable = nil + @ready_write = true + end + + def ready_write_optimized? + rv = @ready_write + @ready_write = false + rv + end + + def wait_writable_prepare + @ready_write = false + @on_writable ||= @mark_writable end # this is used to exchange our own writable status for the readable @@ -14,6 +29,7 @@ module DTAS::WritableIter # :nodoc: def writable_iter if owr = @on_writable @on_writable = nil + @ready_write = true owr.call # this triggers readability watching of DTAS::Buffer end :ignore |