async-io 1.26.0 → 1.27.0

Sign up to get free protection for your applications and to get access to all the features.
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