async-io 1.27.7 → 1.28.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: f36b84a41e617dbb5ffd863ecaf7b68761f6cdbc4969052372ef67071e98b85b
4
- data.tar.gz: 5c655fceda94aaae5b17166e7c039e60558dee99755875dbaa51e1f58244f2a0
3
+ metadata.gz: d3efc5254f6ca150d428d1a13eeaf36775c9a7f0fe3f3859069eb30db4d6b907
4
+ data.tar.gz: 287aa5c3bd8e31304a3d60a7f278bd48307224aa457b67ec766d9c160731a37c
5
5
  SHA512:
6
- metadata.gz: d3fa287b88b45a084bf750cbd5343f02ad0848c0340ba653937933aeec0c980a61e779c6322afcbcb9ada9fd263d92a35fd9b8d5fb5616df3e9d535d06cb6a8b
7
- data.tar.gz: ca1ea7afbee6741820cd9b058fc1bcaa2b1b1f89352280a484ca1ae5732fd2447ec71f4b06deb0d5d0d965e80a00bb17c567ea3188a11c1368eaa26c976a66a4
6
+ metadata.gz: e8be3b2eb8024ebcea499eafe4845415684ab56a7a952141ef4cccb0e91fb7cde2f439734cb4a126051e9de3f349eb15ee59e65f55292d8705cd900c6ebfca4e
7
+ data.tar.gz: 9b46e1c7eb93a45e72cd5b0698b57213f31b4f8fc23c546f0bf887fd1e0cc17c9978fa03adb52f58cffb8a4b53df87bb16a514d02b676d7913102e57bac11df8
@@ -2,9 +2,10 @@ language: ruby
2
2
  dist: xenial
3
3
  cache: bundler
4
4
 
5
+ script: bundle exec rspec
6
+
5
7
  matrix:
6
8
  include:
7
- - rvm: 2.4
8
9
  - rvm: 2.5
9
10
  - rvm: 2.6
10
11
  - rvm: 2.7
data/Gemfile CHANGED
@@ -5,13 +5,6 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in async-io.gemspec
6
6
  gemspec
7
7
 
8
- group :development do
9
- gem 'pry'
10
- gem 'guard-rspec'
11
-
12
- gem 'bake-bundler'
13
- end
14
-
15
8
  group :test do
16
9
  gem 'benchmark-ips'
17
10
  gem 'ruby-prof', platforms: :mri
@@ -19,12 +19,12 @@ Gem::Specification.new do |spec|
19
19
  spec.add_dependency "async", "~> 1.14"
20
20
  spec.add_development_dependency "async-rspec", "~> 1.10"
21
21
 
22
- spec.required_ruby_version = '~> 2.4'
22
+ spec.required_ruby_version = '~> 2.5'
23
23
 
24
24
  spec.add_development_dependency "async-container", "~> 0.15"
25
25
 
26
26
  spec.add_development_dependency "covered"
27
27
  spec.add_development_dependency "bundler"
28
- spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "bake-bundler"
29
29
  spec.add_development_dependency "rspec", "~> 3.0"
30
30
  end
@@ -46,8 +46,9 @@ module Async
46
46
  @io = io
47
47
  @eof = false
48
48
 
49
- @deferred = deferred
50
49
  @pending = 0
50
+ # This field is ignored, but used to mean, try to buffer packets in a single iteration of the reactor.
51
+ # @deferred = deferred
51
52
 
52
53
  @writing = Async::Semaphore.new(1)
53
54
 
@@ -148,23 +149,19 @@ module Async
148
149
  end
149
150
 
150
151
  # Flushes buffered data to the stream.
151
- def flush(deferred: @deferred)
152
- if deferred and task = Task.current?
153
- # Despite how it looks, this field is not actually directly related to whether or not writes should occur. It's actually used to control the logic of deferred flushing. Therefore, it should NOT be modified outside this method.
154
- @pending += 1
152
+ def flush
153
+ return if @write_buffer.empty?
154
+
155
+ @writing.acquire do
156
+ # Flip the write buffer and drain buffer:
157
+ @write_buffer, @drain_buffer = @drain_buffer, @write_buffer
155
158
 
156
- if @pending == 1
157
- task.yield
158
-
159
- begin
160
- drain_write_buffer unless @write_buffer.empty?
161
- ensure
162
- # The write buffer no longer contains pending writes
163
- @pending = 0
164
- end
159
+ begin
160
+ @io.write(@drain_buffer)
161
+ ensure
162
+ # If the write operation fails, we still need to clear this buffer, and the data is essentially lost.
163
+ @drain_buffer.clear
165
164
  end
166
- else
167
- drain_write_buffer unless @write_buffer.empty?
168
165
  end
169
166
  end
170
167
 
@@ -210,7 +207,7 @@ module Async
210
207
  end
211
208
 
212
209
  def close_write
213
- drain_write_buffer unless @write_buffer.empty?
210
+ flush
214
211
  ensure
215
212
  @io.close_write
216
213
  end
@@ -220,7 +217,7 @@ module Async
220
217
  return if @io.closed?
221
218
 
222
219
  begin
223
- drain_write_buffer unless @write_buffer.empty?
220
+ flush
224
221
  rescue
225
222
  # We really can't do anything here unless we want #close to raise exceptions.
226
223
  ensure
@@ -250,32 +247,6 @@ module Async
250
247
 
251
248
  private
252
249
 
253
- # For efficiency purposes, only call this method when the write buffer is not empty.
254
- def drain_write_buffer
255
- @writing.acquire do
256
- Async.logger.debug(self) do |buffer|
257
- if @pending > 0
258
- buffer.puts "Draining #{@pending} writes (#{@write_buffer.bytesize} bytes)..."
259
- else
260
- buffer.puts "Draining immediate write (#{@write_buffer.bytesize} bytes)..."
261
- end
262
-
263
- # buffer.puts "@write_buffer = #{@write_buffer.inspect}"
264
- # buffer.puts "@drain_buffer = #{@drain_buffer.inspect}"
265
- end
266
-
267
- # Flip the write buffer and drain buffer:
268
- @write_buffer, @drain_buffer = @drain_buffer, @write_buffer
269
-
270
- begin
271
- @io.write(@drain_buffer)
272
- ensure
273
- # If the write operation fails, we still need to clear this buffer, and the data is essentially lost.
274
- @drain_buffer.clear
275
- end
276
- end
277
- end
278
-
279
250
  # Fills the buffer from the underlying stream.
280
251
  def fill_read_buffer(size = @block_size)
281
252
  # We impose a limit because the underlying `read` system call can fail if we request too much data in one go.
@@ -284,7 +255,7 @@ module Async
284
255
  end
285
256
 
286
257
  # This effectively ties the input and output stream together.
287
- drain_write_buffer unless @write_buffer.empty?
258
+ flush
288
259
 
289
260
  if @read_buffer.empty?
290
261
  if @io.read_nonblock(size, @read_buffer, exception: false)
@@ -22,6 +22,6 @@
22
22
 
23
23
  module Async
24
24
  module IO
25
- VERSION = "1.27.7"
25
+ VERSION = "1.28.0"
26
26
  end
27
27
  end
@@ -23,8 +23,6 @@
23
23
  require 'async/io/host_endpoint'
24
24
  require 'async/io/shared_endpoint'
25
25
 
26
- require 'pry'
27
-
28
26
  RSpec.describe Async::IO::SharedEndpoint do
29
27
  include_context Async::RSpec::Reactor
30
28
 
@@ -83,7 +83,7 @@ RSpec.describe Async::IO::Stream do
83
83
 
84
84
  task = reactor.async do
85
85
  output.write("Hello World")
86
- output.flush(deferred: true)
86
+ output.flush
87
87
  end
88
88
 
89
89
  expect do
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.27.7
4
+ version: 1.28.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: 2020-03-30 00:00:00.000000000 Z
11
+ date: 2020-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async
@@ -81,19 +81,19 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rake
84
+ name: bake-bundler
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '10.0'
89
+ version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '10.0'
96
+ version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -204,7 +204,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
204
204
  requirements:
205
205
  - - "~>"
206
206
  - !ruby/object:Gem::Version
207
- version: '2.4'
207
+ version: '2.5'
208
208
  required_rubygems_version: !ruby/object:Gem::Requirement
209
209
  requirements:
210
210
  - - ">="