concurrent-ruby 1.1.7 → 1.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Rakefile +5 -3
- data/lib/concurrent-ruby/concurrent/atomic/ruby_thread_local_var.rb +4 -1
- data/lib/concurrent-ruby/concurrent/concurrent_ruby.jar +0 -0
- data/lib/concurrent-ruby/concurrent/tvar.rb +9 -6
- data/lib/concurrent-ruby/concurrent/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 207cadfd4ec0e25f6ba9881ef8f32ea86c5772074d4aff5e2ab5d5bdf4613e09
|
4
|
+
data.tar.gz: b41c0dd080a6d2fbf1d2c97bf2e9a8db0e99849ba875d32ade39384838e20e23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4edf0b84df6aa42a69c6ff231c730d12a64df6819ebea508599b469d88951c47ce4b091d3f3fc41afcb9196986091efe57d156161510f03cfb8ee0ebaf66ff0c
|
7
|
+
data.tar.gz: a18c3ef751cadd220d424779e96d96ead76362ad4e7bfcfb2341d9ba4baed6f0b8427c452e31868e512ab2b3a8226fe350041e0e5b87cd28e10d9ce1b5334c72
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
## Current
|
2
2
|
|
3
|
+
## Release v1.1.8 (20 January 2021)
|
4
|
+
|
5
|
+
* (#885) Fix race condition in TVar for stale reads
|
6
|
+
* (#884) RubyThreadLocalVar: Do not iterate over hash which might conflict with new pair addition
|
7
|
+
|
3
8
|
## Release v1.1.7 (6 August 2020)
|
4
9
|
|
5
10
|
concurrent-ruby:
|
data/Rakefile
CHANGED
@@ -49,7 +49,9 @@ namespace :repackage do
|
|
49
49
|
Rake::Task['lib/concurrent-ruby/concurrent/concurrent_ruby.jar'].invoke
|
50
50
|
|
51
51
|
# build all gem files
|
52
|
-
|
52
|
+
%w[x86-mingw32 x64-mingw32].each do |plat|
|
53
|
+
RakeCompilerDock.sh "bundle install --local && bundle exec rake native:#{plat} gem --trace", platform: plat
|
54
|
+
end
|
53
55
|
end
|
54
56
|
end
|
55
57
|
end
|
@@ -302,7 +304,7 @@ namespace :release do
|
|
302
304
|
end
|
303
305
|
|
304
306
|
desc '** tag HEAD with current version and push to github'
|
305
|
-
task :tag do
|
307
|
+
task :tag => :ask do
|
306
308
|
Dir.chdir(__dir__) do
|
307
309
|
sh "git tag v#{Concurrent::VERSION}"
|
308
310
|
sh "git push origin v#{Concurrent::VERSION}"
|
@@ -312,7 +314,7 @@ namespace :release do
|
|
312
314
|
end
|
313
315
|
|
314
316
|
desc '** push all *.gem files to rubygems'
|
315
|
-
task :rubygems do
|
317
|
+
task :rubygems => :ask do
|
316
318
|
Dir.chdir(__dir__) do
|
317
319
|
sh "gem push pkg/concurrent-ruby-#{Concurrent::VERSION}.gem"
|
318
320
|
sh "gem push pkg/concurrent-ruby-edge-#{Concurrent::EDGE_VERSION}.gem" if publish_edge
|
@@ -97,7 +97,10 @@ module Concurrent
|
|
97
97
|
# The cost of GC'ing a TLV is linear in the number of threads using TLVs
|
98
98
|
# But that is natural! More threads means more storage is used per TLV
|
99
99
|
# So naturally more CPU time is required to free more storage
|
100
|
-
|
100
|
+
#
|
101
|
+
# DO NOT use each_value which might conflict with new pair assignment
|
102
|
+
# into the hash in #value= method
|
103
|
+
THREAD_LOCAL_ARRAYS.values.each { |array| array[index] = nil }
|
101
104
|
# free index has to be published after the arrays are cleared
|
102
105
|
FREE.push(index)
|
103
106
|
end
|
Binary file
|
@@ -188,7 +188,10 @@ module Concurrent
|
|
188
188
|
def write(tvar, value)
|
189
189
|
# Have we already written to this TVar?
|
190
190
|
|
191
|
-
|
191
|
+
if @write_log.has_key? tvar
|
192
|
+
# Record the value written
|
193
|
+
@write_log[tvar] = value
|
194
|
+
else
|
192
195
|
# Try to lock the TVar
|
193
196
|
|
194
197
|
unless tvar.unsafe_lock.try_lock
|
@@ -196,7 +199,11 @@ module Concurrent
|
|
196
199
|
Concurrent::abort_transaction
|
197
200
|
end
|
198
201
|
|
199
|
-
#
|
202
|
+
# Record the value written
|
203
|
+
|
204
|
+
@write_log[tvar] = value
|
205
|
+
|
206
|
+
# If we previously read from it, check the version hasn't changed
|
200
207
|
|
201
208
|
@read_log.each do |log_entry|
|
202
209
|
if log_entry.tvar == tvar and tvar.unsafe_version > log_entry.version
|
@@ -204,10 +211,6 @@ module Concurrent
|
|
204
211
|
end
|
205
212
|
end
|
206
213
|
end
|
207
|
-
|
208
|
-
# Record the value written
|
209
|
-
|
210
|
-
@write_log[tvar] = value
|
211
214
|
end
|
212
215
|
|
213
216
|
def abort
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: concurrent-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jerry D'Antonio
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2021-01-20 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: |
|
16
16
|
Modern concurrency tools including agents, futures, promises, thread pools, actors, supervisors, and more.
|
@@ -184,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
184
184
|
- !ruby/object:Gem::Version
|
185
185
|
version: '0'
|
186
186
|
requirements: []
|
187
|
-
rubygems_version: 3.
|
187
|
+
rubygems_version: 3.2.3
|
188
188
|
signing_key:
|
189
189
|
specification_version: 4
|
190
190
|
summary: Modern concurrency tools for Ruby. Inspired by Erlang, Clojure, Scala, Haskell,
|