async-io 1.26.0 → 1.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8c73625346e61dc5ca64794c5fe70343437cf18e2f019a1fb7bba89d76eaaba6
4
- data.tar.gz: 3fb2fbe3c6b50642b8ad3650b7829119c7f5b41ee8837569571e01a30364a4cf
3
+ metadata.gz: 59838b8c517c12bc36a08b4c235ee149c235f4b61bd405f1548cc2a9eedf0e20
4
+ data.tar.gz: afe198be21f60e75ff8392d8a86c17da15f2144ad5328fd604b5439c0e14fd7e
5
5
  SHA512:
6
- metadata.gz: aca0fe4641f3066d1eb564b788a31ce5644a318281725342c8ee98f581d8af110c0c9b302e4d9b6e5816802234213d62da53dc34f0fc2715c173e9de79e03ad0
7
- data.tar.gz: f318d5debbba3f6cad57d948cc3a16fb716c4bb79f5a84ec0cca5eee3edaadad983103c8188e3b6d83bb4db14393941c1750ba7955903efd8a7f79321e51d6e2
6
+ metadata.gz: 22e304e89cae6e6bf51429aeb5db10f85e4e5a392ad97117ee0d56617e6c8468a06f5d709160c7f20ec14618c24e8c470c8580d3ae3dbd1c7ea5d90586628f28
7
+ data.tar.gz: 7102c28210f26c23d49c5bcb58f4e48bec0036231d8133f814aa1d3811e066e92a1af732e484088d0d0f1ae1a51a8637293e9e2506bdf34c0aaa739f6536005a
@@ -38,7 +38,7 @@ module Async
38
38
  end
39
39
  end
40
40
 
41
- def initialize(io, block_size: BLOCK_SIZE, maximum_read_size: MAXIMUM_READ_SIZE, sync: true, deferred: nil)
41
+ def initialize(io, block_size: BLOCK_SIZE, maximum_read_size: MAXIMUM_READ_SIZE, sync: true, deferred: false)
42
42
  @io = io
43
43
  @eof = false
44
44
 
@@ -58,8 +58,6 @@ module Async
58
58
  @input_buffer = Buffer.new
59
59
  end
60
60
 
61
- attr_accessor :reactor
62
-
63
61
  attr :io
64
62
  attr :block_size
65
63
 
@@ -164,36 +162,29 @@ module Async
164
162
  end
165
163
 
166
164
  # Flushes buffered data to the stream.
167
- def flush
165
+ def flush(deferred: @deferred)
168
166
  unless @write_buffer.empty?
169
- if @deferred and task = Task.current
167
+ if deferred and task = Task.current?
170
168
  if @pending.zero?
171
- task.reactor << self
169
+ @pending += 1
170
+ task.yield
171
+ else
172
+ @pending += 1
173
+ # task.yield
174
+ return
172
175
  end
173
176
 
174
- @pending += 1
175
- else
176
- Async.logger.debug(self) {"Flushing immediate write (#{@write_buffer.bytesize} bytes)..."}
177
+ Async.logger.debug(self) {"Flushing #{@pending} writes (#{@write_buffer.bytesize} bytes)..."}
177
178
 
178
- @io.write(@write_buffer)
179
- @write_buffer.clear
180
179
  @pending = 0
180
+ else
181
+ Async.logger.debug(self) {"Flushing immediate write (#{@write_buffer.bytesize} bytes)..."}
181
182
  end
183
+
184
+ drain_write_buffer
182
185
  end
183
186
  end
184
187
 
185
- def alive?
186
- @pending > 0
187
- end
188
-
189
- def resume
190
- Async.logger.debug(self) {"Flushing #{@pending} writes (#{@write_buffer.bytesize} bytes)..."}
191
-
192
- @io.write(@write_buffer)
193
- @write_buffer.clear
194
- @pending = 0
195
- end
196
-
197
188
  def gets(separator = $/, **options)
198
189
  read_until(separator, **options)
199
190
  end
@@ -219,7 +210,7 @@ module Async
219
210
  end
220
211
 
221
212
  def close_write
222
- resume unless @write_buffer.empty?
213
+ drain_write_buffer
223
214
  ensure
224
215
  @io.close_write
225
216
  end
@@ -229,7 +220,7 @@ module Async
229
220
  return if @io.closed?
230
221
 
231
222
  begin
232
- resume unless @write_buffer.empty?
223
+ drain_write_buffer
233
224
  rescue
234
225
  # We really can't do anything here unless we want #close to raise exceptions.
235
226
  ensure
@@ -259,6 +250,14 @@ module Async
259
250
 
260
251
  private
261
252
 
253
+ def drain_write_buffer
254
+ unless @write_buffer.empty?
255
+ # Async.logger.debug(self, name: "write") {@write_buffer.inspect}
256
+ @io.write(@write_buffer)
257
+ @write_buffer.clear
258
+ end
259
+ end
260
+
262
261
  # Fills the buffer from the underlying stream.
263
262
  def fill_read_buffer(size = @block_size)
264
263
  # We impose a limit because the underlying `read` system call can fail if we request too much data in one go.
@@ -268,11 +267,13 @@ module Async
268
267
 
269
268
  if @read_buffer.empty?
270
269
  if @io.read_nonblock(size, @read_buffer, exception: false)
270
+ # Async.logger.debug(self, name: "read") {@read_buffer.inspect}
271
271
  return true
272
272
  end
273
273
  else
274
274
  if chunk = @io.read_nonblock(size, @input_buffer, exception: false)
275
275
  @read_buffer << chunk
276
+ # Async.logger.debug(self, name: "read") {@read_buffer.inspect}
276
277
  return true
277
278
  end
278
279
  end
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Async
22
22
  module IO
23
- VERSION = "1.26.0"
23
+ VERSION = "1.27.0"
24
24
  end
25
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-io
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.26.0
4
+ version: 1.27.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-14 00:00:00.000000000 Z
11
+ date: 2019-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async