rubysl-thwait 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 40906ea355b3bfdfa40b94426b8b51aba99e5936
4
+ data.tar.gz: 09a29ae3102328fa032ada0cdb9764ee4cf66acc
5
+ SHA512:
6
+ metadata.gz: 3bd3b46c121211699a4a90738f49d22525eaa11be9cbfcee811ce4c22c339a451a70e447745000ffa0ab76f75ea606851ec56724afb01b90f5b49917ac159011
7
+ data.tar.gz: a7e449b7ff975b48e2f8471455090e223ce5bcc3ae4dfd7c475246a24781391061bb9c173c8d51a3bab8fecd7981bfd49b631a23a4dfd679741481ca7e48b35e
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ before_install:
3
+ - gem update --system
4
+ - gem --version
5
+ - gem install rubysl-bundler
6
+ script: bundle exec mspec spec
7
+ rvm:
8
+ - rbx-nightly-18mode
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rubysl-threads_wait.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,25 @@
1
+ Copyright (c) 2013, Brian Shirai
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+ 2. Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ 3. Neither the name of the library nor the names of its contributors may be
13
+ used to endorse or promote products derived from this software without
14
+ specific prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+ DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY DIRECT,
20
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
25
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # Rubysl::ThreadsWait
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'rubysl-threads_wait'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install rubysl-threads_wait
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,2 @@
1
+ require "rubysl/thwait/thwait"
2
+ require "rubysl/thwait/version"
@@ -0,0 +1,175 @@
1
+ #
2
+ # thwait.rb - thread synchronization class
3
+ # $Release Version: 0.9 $
4
+ # $Revision: 1.3 $
5
+ # $Date: 1998/06/26 03:19:34 $
6
+ # by Keiju ISHITSUKA(Nihpon Rational Software Co.,Ltd.)
7
+ # modernized by Evan Phoenix - 2011
8
+ # --
9
+ # feature:
10
+ # provides synchronization for multiple threads.
11
+ #
12
+ # class methods:
13
+ # * ThreadsWait.all_waits(thread1,...)
14
+ # waits until all of specified threads are terminated.
15
+ # if a block is supplied for the method, evaluates it for
16
+ # each thread termination.
17
+ # * th = ThreadsWait.new(thread1,...)
18
+ # creates synchronization object, specifying thread(s) to wait.
19
+ #
20
+ # methods:
21
+ # * th.threads
22
+ # list threads to be synchronized
23
+ # * th.empty?
24
+ # is there any thread to be synchronized.
25
+ # * th.finished?
26
+ # is there already terminated thread.
27
+ # * th.join(thread1,...)
28
+ # wait for specified thread(s).
29
+ # * th.join_nowait(threa1,...)
30
+ # specifies thread(s) to wait. non-blocking.
31
+ # * th.next_wait
32
+ # waits until any of specified threads is terminated.
33
+ # * th.all_waits
34
+ # waits until all of specified threads are terminated.
35
+ # if a block is supplied for the method, evaluates it for
36
+ # each thread termination.
37
+ #
38
+
39
+ require "thread"
40
+
41
+ #
42
+ # This class watches for termination of multiple threads. Basic functionality
43
+ # (wait until specified threads have terminated) can be accessed through the
44
+ # class method ThreadsWait::all_waits. Finer control can be gained using
45
+ # instance methods.
46
+ #
47
+ # Example:
48
+ #
49
+ # ThreadsWait.all_waits(thr1, thr2, ...) do |t|
50
+ # STDERR.puts "Thread #{t} has terminated."
51
+ # end
52
+ #
53
+ class ThreadsWait
54
+ RCS_ID='-$Id: thwait.rb:git 1.4 2011/01/24 00:00:00 evan $-'
55
+
56
+ class ErrNoWaitingThread < StandardError
57
+ end
58
+
59
+ class ErrNoFinishedThread < StandardError
60
+ end
61
+
62
+ #
63
+ # Waits until all specified threads have terminated. If a block is provided,
64
+ # it is executed for each thread termination.
65
+ #
66
+ def ThreadsWait.all_waits(*threads) # :yield: thread
67
+ tw = ThreadsWait.new(*threads)
68
+ if block_given?
69
+ tw.all_waits do |th|
70
+ yield th
71
+ end
72
+ else
73
+ tw.all_waits
74
+ end
75
+ end
76
+
77
+ #
78
+ # Creates a ThreadsWait object, specifying the threads to wait on.
79
+ # Non-blocking.
80
+ #
81
+ def initialize(*threads)
82
+ @threads = []
83
+ @wait_queue = Queue.new
84
+ join_nowait(*threads) unless threads.empty?
85
+ end
86
+
87
+ # Returns the array of threads in the wait queue.
88
+ attr_reader :threads
89
+
90
+ #
91
+ # Returns +true+ if there are no threads to be synchronized.
92
+ #
93
+ def empty?
94
+ @threads.empty?
95
+ end
96
+
97
+ #
98
+ # Returns +true+ if any thread has terminated.
99
+ #
100
+ def finished?
101
+ !@wait_queue.empty?
102
+ end
103
+
104
+ #
105
+ # Waits for specified threads to terminate.
106
+ #
107
+ def join(*threads)
108
+ join_nowait(*threads)
109
+ next_wait
110
+ end
111
+
112
+ #
113
+ # Specifies the threads that this object will wait for, but does not actually
114
+ # wait.
115
+ #
116
+ def join_nowait(*threads)
117
+ threads.flatten!
118
+ @threads.concat threads
119
+
120
+ threads.each do |th|
121
+ Thread.start(th) do |t|
122
+ begin
123
+ t.join
124
+ ensure
125
+ @wait_queue.push t
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ #
132
+ # Waits until any of the specified threads has terminated, and returns the one
133
+ # that does.
134
+ #
135
+ # If there are no pending threads to wait for, raises +ErrNoWaitingThread+.
136
+ # If +nonblock+ is true and there is no terminated thread,
137
+ # raises +ErrNoFinishedThread+.
138
+ #
139
+ def next_wait(nonblock=nil)
140
+ raise ErrNoWaitingThread, "No threads for waiting" if @threads.empty?
141
+
142
+ begin
143
+ th = @wait_queue.pop(nonblock)
144
+ @threads.delete th
145
+ return th
146
+ rescue ThreadError
147
+ raise ErrNoFinishedThread, "No finished threads"
148
+ end
149
+ end
150
+
151
+ #
152
+ # Waits until all of the specified threads are terminated. If a block is
153
+ # supplied for the method, it is executed for each thread termination.
154
+ #
155
+ # Raises exceptions in the same manner as +next_wait+.
156
+ #
157
+ def all_waits
158
+ until @threads.empty?
159
+ th = next_wait
160
+ yield th if block_given?
161
+ end
162
+ end
163
+ end
164
+
165
+ # deprecated alias
166
+
167
+ ThWait = ThreadsWait
168
+
169
+ # Documentation comments:
170
+ # - Source of documentation is evenly split between Nutshell, existing
171
+ # comments, and my own rephrasing.
172
+ # - I'm not particularly confident that the comments are all exactly correct.
173
+ # - The history, etc., up the top appears in the RDoc output. Perhaps it would
174
+ # be better to direct that not to appear, and put something else there
175
+ # instead.
@@ -0,0 +1,5 @@
1
+ module RubySL
2
+ module ThreadsWait
3
+ VERSION = "1.0.0"
4
+ end
5
+ end
data/lib/thwait.rb ADDED
@@ -0,0 +1 @@
1
+ require "rubysl/thwait"
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ require './lib/rubysl/thwait/version'
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "rubysl-thwait"
6
+ spec.version = RubySL::ThreadsWait::VERSION
7
+ spec.authors = ["Brian Shirai"]
8
+ spec.email = ["brixen@gmail.com"]
9
+ spec.description = %q{Ruby standard library threads_wait.}
10
+ spec.summary = %q{Ruby standard library threads_wait.}
11
+ spec.homepage = "https://github.com/rubysl/rubysl-threads_wait"
12
+ spec.license = "BSD"
13
+
14
+ spec.files = `git ls-files`.split($/)
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.required_ruby_version = "~> 1.8.7"
20
+
21
+ spec.add_runtime_dependency "rubysl-thread", "~> 1.0"
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "mspec", "~> 1.5"
26
+ spec.add_development_dependency "rubysl-prettyprint", "~> 1.0"
27
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubysl-thwait
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Brian Shirai
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rubysl-thread
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.5'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.5'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubysl-prettyprint
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ description: Ruby standard library threads_wait.
84
+ email:
85
+ - brixen@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - .gitignore
91
+ - .travis.yml
92
+ - Gemfile
93
+ - LICENSE
94
+ - README.md
95
+ - Rakefile
96
+ - lib/rubysl/thwait.rb
97
+ - lib/rubysl/thwait/thwait.rb
98
+ - lib/rubysl/thwait/version.rb
99
+ - lib/thwait.rb
100
+ - rubysl-thwait.gemspec
101
+ homepage: https://github.com/rubysl/rubysl-threads_wait
102
+ licenses:
103
+ - BSD
104
+ metadata: {}
105
+ post_install_message:
106
+ rdoc_options: []
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ~>
112
+ - !ruby/object:Gem::Version
113
+ version: 1.8.7
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ requirements: []
120
+ rubyforge_project:
121
+ rubygems_version: 2.0.7
122
+ signing_key:
123
+ specification_version: 4
124
+ summary: Ruby standard library threads_wait.
125
+ test_files: []
126
+ has_rdoc: