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 +4 -4
- data/lib/async/io/stream.rb +26 -25
- data/lib/async/io/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59838b8c517c12bc36a08b4c235ee149c235f4b61bd405f1548cc2a9eedf0e20
|
4
|
+
data.tar.gz: afe198be21f60e75ff8392d8a86c17da15f2144ad5328fd604b5439c0e14fd7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22e304e89cae6e6bf51429aeb5db10f85e4e5a392ad97117ee0d56617e6c8468a06f5d709160c7f20ec14618c24e8c470c8580d3ae3dbd1c7ea5d90586628f28
|
7
|
+
data.tar.gz: 7102c28210f26c23d49c5bcb58f4e48bec0036231d8133f814aa1d3811e066e92a1af732e484088d0d0f1ae1a51a8637293e9e2506bdf34c0aaa739f6536005a
|
data/lib/async/io/stream.rb
CHANGED
@@ -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:
|
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
|
167
|
+
if deferred and task = Task.current?
|
170
168
|
if @pending.zero?
|
171
|
-
|
169
|
+
@pending += 1
|
170
|
+
task.yield
|
171
|
+
else
|
172
|
+
@pending += 1
|
173
|
+
# task.yield
|
174
|
+
return
|
172
175
|
end
|
173
176
|
|
174
|
-
@pending
|
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
|
-
|
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
|
-
|
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
|
data/lib/async/io/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2019-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|