nio4r 1.2.0 → 1.2.1

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
  SHA1:
3
- metadata.gz: 339fc3cc040e41d266a9f83ab155d903294fcdc5
4
- data.tar.gz: 8872185b3bfadc884b36b65ea1a17a2c082d7090
3
+ metadata.gz: 40a72f524510c03062dc6c3dbf8a6a20236b1f25
4
+ data.tar.gz: 0378f2eeeb4ab372da04f9a2f1010d4847c85587
5
5
  SHA512:
6
- metadata.gz: 73083b74bdcb581449b5b0534209fdd9b1c08059ee946eaf9f8155d72605030c127046a7819d4ed325e0bf3e525c4aec81a41c00b55077f9e5b4629dd147d931
7
- data.tar.gz: 44eb8368129b34cfb8780b98334ff8a67029d1751fdfc756ee761cb19c975f55a95c5166a251dba88ea7f587a3441f19650dcb13d936d88c60f847bda9c20d1d
6
+ metadata.gz: 02c255084b29eccedf83860ece30471660af81abcf294cc332cd86816c963ff53e81d1fa4ed7f84108e33762775b08fbf124877452690dfe4755d23cb5788bf4
7
+ data.tar.gz: 6b5e34b3863e6cfe1311f4aed6706de099cc09371a2fb8a6439c6a5f164afa2511a18cf0086abded3541770561342c0d6a58ad4e96aaa6b5d7021e66054f1bbe
data/CHANGES.md CHANGED
@@ -1,7 +1,12 @@
1
+ 1.2.1 (2016-01-31)
2
+ ------------------
3
+ * Fix bug in the JRuby backend which cases indefinite blocking when small
4
+ timeout values are passed to the selector
5
+
1
6
  1.2.0 (2015-12-22)
2
7
  ------------------
3
8
  * Add NIO::Monitor#interests= API for changing interests. Contributed by
4
- @UpeksheJay as a Google Summer of Code project.
9
+ Upekshe Jayasekera as a Google Summer of Code project.
5
10
  * Update to libev 4.22
6
11
 
7
12
  1.1.1 (2015-07-17)
data/Gemfile CHANGED
@@ -1,7 +1,15 @@
1
1
  source "https://rubygems.org"
2
2
 
3
+ gemspec
4
+
3
5
  gem "jruby-openssl" if defined? JRUBY_VERSION
4
- gem "coveralls", require: false
5
6
 
6
- # Specify your gem's dependencies in nio4r.gemspec
7
- gemspec
7
+ group :development do
8
+ gem "rake-compiler"
9
+ end
10
+
11
+ group :test do
12
+ gem "rspec", "~> 3.0"
13
+ gem "rubocop", "0.36.0"
14
+ gem "coveralls", require: false
15
+ end
data/README.md CHANGED
@@ -1,9 +1,10 @@
1
1
  ![nio4r](https://raw.github.com/celluloid/nio4r/master/logo.png)
2
2
  ===============
3
- [![Gem Version](https://badge.fury.io/rb/nio4r.png)](http://rubygems.org/gems/nio4r)
4
- [![Build Status](https://secure.travis-ci.org/celluloid/nio4r.png?branch=master)](http://travis-ci.org/celluloid/nio4r)
5
- [![Code Climate](https://codeclimate.com/github/celluloid/nio4r.png)](https://codeclimate.com/github/celluloid/nio4r)
6
- [![Coverage Status](https://coveralls.io/repos/celluloid/nio4r/badge.png?branch=master)](https://coveralls.io/r/celluloid/nio4r)
3
+ [![Gem Version](https://badge.fury.io/rb/nio4r.svg)](http://rubygems.org/gems/nio4r)
4
+ [![Build Status](https://secure.travis-ci.org/celluloid/nio4r.svg?branch=master)](http://travis-ci.org/celluloid/nio4r)
5
+ [![Code Climate](https://codeclimate.com/github/celluloid/nio4r.svg)](https://codeclimate.com/github/celluloid/nio4r)
6
+ [![Coverage Status](https://coveralls.io/repos/celluloid/nio4r/badge.svg?branch=master)](https://coveralls.io/r/celluloid/nio4r)
7
+ [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/celluloid/nio4r/blob/master/LICENSE.txt)
7
8
 
8
9
  nio4r: New IO for Ruby.
9
10
 
@@ -137,6 +138,7 @@ if you aren't concerned with thread safety, or you're within a #select
137
138
  block:
138
139
 
139
140
  - ***#interests***: what this monitor is interested in (:r, :w, or :rw)
141
+ - ***#interests=***: change the current interests for a monitor (to :r, :w, or :rw)
140
142
  - ***#readiness***: what I/O operations the monitored object is ready for
141
143
  - ***#readable?***: was the IO readable last time it was selected?
142
144
  - ***#writable?***: was the IO writable last time it was selected?
@@ -187,8 +189,8 @@ however this is not the case today.
187
189
  License
188
190
  -------
189
191
 
190
- Copyright (c) 2011-2015 Tony Arcieri. Distributed under the MIT License.
192
+ Copyright (c) 2011-2016 Tony Arcieri. Distributed under the MIT License.
191
193
  See LICENSE.txt for further details.
192
194
 
193
- Includes libev 4.19. Copyright (c) 2009-2014 Marc Alexander Lehmann.
195
+ Includes libev 4.22. Copyright (c) 2007-2015 Marc Alexander Lehmann.
194
196
  Distributed under the BSD license. See ext/libev/LICENSE for details.
@@ -287,7 +287,12 @@ public class Nio4r implements Library {
287
287
  } else if(t < 0) {
288
288
  throw runtime.newArgumentError("time interval must be positive");
289
289
  } else {
290
- result = this.selector.select((long)(t * 1000));
290
+ long timeoutMilliSeconds = (long)(t * 1000);
291
+ if(timeoutMilliSeconds == 0) {
292
+ result = this.selector.selectNow();
293
+ } else {
294
+ result = this.selector.select(timeoutMilliSeconds);
295
+ }
291
296
  }
292
297
  }
293
298
  context.getThread().afterBlockingCall();
data/lib/nio.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "thread"
2
4
  require "socket"
3
5
  require "nio/version"
@@ -16,7 +18,7 @@ end
16
18
  if ENV["NIO4R_PURE"] == "true" || (Gem.win_platform? && !defined?(JRUBY_VERSION))
17
19
  require "nio/monitor"
18
20
  require "nio/selector"
19
- NIO::ENGINE = "ruby"
21
+ NIO::ENGINE = "ruby".freeze
20
22
  else
21
23
  require "nio4r_ext"
22
24
 
@@ -24,8 +26,8 @@ else
24
26
  require "java"
25
27
  require "jruby"
26
28
  org.nio4r.Nio4r.new.load(JRuby.runtime, false)
27
- NIO::ENGINE = "java"
29
+ NIO::ENGINE = "java".freeze
28
30
  else
29
- NIO::ENGINE = "libev"
31
+ NIO::ENGINE = "libev".freeze
30
32
  end
31
33
  end
@@ -39,7 +39,7 @@ module NIO
39
39
  def writable?
40
40
  readiness == :w || readiness == :rw
41
41
  end
42
- alias_method :writeable?, :writable?
42
+ alias writeable? writable?
43
43
 
44
44
  # Is this monitor closed?
45
45
  def closed?
@@ -78,11 +78,7 @@ module NIO
78
78
 
79
79
  ready_writers.each do |io|
80
80
  monitor = @selectables[io]
81
- if monitor.readiness == :r
82
- monitor.readiness = :rw
83
- else
84
- monitor.readiness = :w
85
- end
81
+ monitor.readiness = (monitor.readiness == :r) ? :rw : :w
86
82
  selected_monitors << monitor
87
83
  end
88
84
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module NIO
2
- VERSION = "1.2.0"
4
+ VERSION = "1.2.1".freeze
3
5
  end
@@ -23,8 +23,6 @@ Gem::Specification.new do |gem|
23
23
  gem.extensions = ["ext/nio4r/extconf.rb"]
24
24
  end
25
25
 
26
- gem.add_development_dependency "rake-compiler"
27
26
  gem.add_development_dependency "rake"
28
- gem.add_development_dependency "rspec", "~> 3.0"
29
- gem.add_development_dependency "rubocop"
27
+ gem.add_development_dependency "bundler"
30
28
  end
@@ -1,4 +1,5 @@
1
1
  require "spec_helper"
2
+ require "timeout"
2
3
 
3
4
  # Timeouts should be at least this precise (in seconds) to pass the tests
4
5
  # Typical precision should be better than this, but if it's worse it will fail
@@ -115,6 +116,16 @@ RSpec.describe NIO::Selector do
115
116
  end
116
117
 
117
118
  context "select" do
119
+ it "does not block on super small precision intervals" do
120
+ wait_interval = 1e-4
121
+
122
+ expect do
123
+ Timeout.timeout(2) do
124
+ subject.select(wait_interval)
125
+ end
126
+ end.not_to raise_error
127
+ end
128
+
118
129
  it "selects IO objects" do
119
130
  writer << "ohai"
120
131
  unready = IO.pipe.first
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nio4r
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Arcieri
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-22 00:00:00.000000000 Z
11
+ date: 2016-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake-compiler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rake
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -39,21 +25,7 @@ dependencies:
39
25
  - !ruby/object:Gem::Version
40
26
  version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '3.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '3.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rubocop
28
+ name: bundler
57
29
  requirement: !ruby/object:Gem::Requirement
58
30
  requirements:
59
31
  - - ">="
@@ -145,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
117
  version: '0'
146
118
  requirements: []
147
119
  rubyforge_project:
148
- rubygems_version: 2.4.8
120
+ rubygems_version: 2.5.1
149
121
  signing_key:
150
122
  specification_version: 4
151
123
  summary: NIO provides a high performance selector API for monitoring IO objects