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 +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
|