win32-semaphore 0.3.1 → 0.3.2
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.
- data/CHANGES +5 -1
- data/README +3 -3
- data/Rakefile +19 -12
- data/lib/win32/semaphore.rb +17 -17
- data/test/test_win32_semaphore.rb +56 -61
- data/win32-semaphore.gemspec +20 -23
- metadata +50 -41
data/CHANGES
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
== 0.3.2 - 23-Mar-2012
|
2
|
+
* Refactored the Rakefile and cleaned up the gemspec.
|
3
|
+
* Removed one test that was originally designed for the C version.
|
4
|
+
|
1
5
|
== 0.3.1 - 11-Aug-2009
|
2
6
|
* Changed license to Artistic 2.0.
|
3
7
|
* The Semaphore.open method is now slightly more robust.
|
@@ -36,4 +40,4 @@
|
|
36
40
|
* Added more tests.
|
37
41
|
|
38
42
|
== 0.1.0 - 14-May-2004
|
39
|
-
* Initial release
|
43
|
+
* Initial release
|
data/README
CHANGED
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
== Known Bugs
|
38
38
|
None known. Any bugs should be reported on the project page at
|
39
|
-
http://
|
39
|
+
http://www.github.com/djberg96/win32-semaphore
|
40
40
|
|
41
41
|
== Future Plans
|
42
42
|
Suggestions welcome.
|
@@ -45,7 +45,7 @@
|
|
45
45
|
Artistic 2.0
|
46
46
|
|
47
47
|
== Copyright
|
48
|
-
(C) 2003-
|
48
|
+
(C) 2003-2012 Daniel J. Berger
|
49
49
|
All Rights Reserved
|
50
50
|
|
51
51
|
== Warranty
|
@@ -53,6 +53,6 @@
|
|
53
53
|
implied warranties, including, without limitation, the implied
|
54
54
|
warranties of merchantability and fitness for a particular purpose.
|
55
55
|
|
56
|
-
==
|
56
|
+
== Authors
|
57
57
|
Daniel J. Berger
|
58
58
|
Park Heesob
|
data/Rakefile
CHANGED
@@ -1,24 +1,31 @@
|
|
1
1
|
require 'rake'
|
2
|
+
require 'rake/clean'
|
2
3
|
require 'rake/testtask'
|
3
|
-
require 'rbconfig'
|
4
|
-
include Config
|
5
4
|
|
6
|
-
|
7
|
-
task :install do
|
8
|
-
sitelibdir = CONFIG['sitelibdir']
|
9
|
-
installdir = File.join(sitelibdir, 'win32')
|
10
|
-
file = 'lib\win32\semaphore.rb'
|
5
|
+
CLEAN.include("**/*.gem")
|
11
6
|
|
12
|
-
|
13
|
-
|
7
|
+
namespace :gem do
|
8
|
+
desc 'Create the win32-semaphore gem'
|
9
|
+
task :create => [:clean] do
|
10
|
+
spec = eval(IO.read('win32-semaphore.gemspec'))
|
11
|
+
Gem::Builder.new(spec).build
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'Install the win32-semaphore gem'
|
15
|
+
task :install => [:create] do
|
16
|
+
file = Dir["*.gem"].first
|
17
|
+
sh "gem install #{file}"
|
18
|
+
end
|
14
19
|
end
|
15
20
|
|
16
21
|
desc 'Run the example program'
|
17
22
|
task :example do
|
18
|
-
|
23
|
+
ruby '-Ilib examples/example_semaphore.rb'
|
19
24
|
end
|
20
25
|
|
21
26
|
Rake::TestTask.new do |t|
|
22
|
-
|
23
|
-
|
27
|
+
t.verbose = true
|
28
|
+
t.warning = true
|
24
29
|
end
|
30
|
+
|
31
|
+
task :default => :test
|
data/lib/win32/semaphore.rb
CHANGED
@@ -5,17 +5,17 @@ module Win32
|
|
5
5
|
|
6
6
|
# The Semaphore class encapsulates semaphore objects on Windows.
|
7
7
|
class Semaphore < Ipc
|
8
|
-
|
8
|
+
|
9
9
|
# This is the error raised if any of the Semaphore methods fail.
|
10
10
|
class Error < StandardError; end
|
11
|
-
|
11
|
+
|
12
12
|
extend Windows::Synchronize
|
13
13
|
extend Windows::Error
|
14
14
|
extend Windows::Handle
|
15
|
-
|
15
|
+
|
16
16
|
# The version of the win32-semaphore library
|
17
|
-
VERSION = '0.3.
|
18
|
-
|
17
|
+
VERSION = '0.3.2'
|
18
|
+
|
19
19
|
# The initial count for the semaphore object. This value must be greater
|
20
20
|
# than or equal to zero and less than or equal to +max_count+. The state
|
21
21
|
# of a semaphore is signaled when its count is greater than zero and
|
@@ -25,16 +25,16 @@ module Win32
|
|
25
25
|
# Semaphore#release method.
|
26
26
|
#
|
27
27
|
attr_reader :initial_count
|
28
|
-
|
28
|
+
|
29
29
|
# The maximum count for the semaphore object. This value must be
|
30
|
-
# greater than zero.
|
30
|
+
# greater than zero.
|
31
31
|
#
|
32
32
|
attr_reader :max_count
|
33
|
-
|
33
|
+
|
34
34
|
# The name of the Semaphore object.
|
35
35
|
#
|
36
36
|
attr_reader :name
|
37
|
-
|
37
|
+
|
38
38
|
# Creates and returns new Semaphore object. If +name+ is omitted, the
|
39
39
|
# Semaphore object is created without a name, i.e. it's anonymous.
|
40
40
|
#
|
@@ -54,12 +54,12 @@ module Win32
|
|
54
54
|
@max_count = max_count
|
55
55
|
@name = name
|
56
56
|
@inherit = inherit
|
57
|
-
|
57
|
+
|
58
58
|
# Used to prevent potential segfaults.
|
59
59
|
if name && !name.is_a?(String)
|
60
60
|
raise TypeError, 'name must be a string'
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
if inherit
|
64
64
|
sec = 0.chr * 12 # sizeof(SECURITY_ATTRIBUTES)
|
65
65
|
sec[0,4] = [12].pack('L')
|
@@ -67,15 +67,15 @@ module Win32
|
|
67
67
|
else
|
68
68
|
sec = 0
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
handle = CreateSemaphore(sec, initial_count, max_count, name)
|
72
|
-
|
72
|
+
|
73
73
|
if handle == 0 || handle == INVALID_HANDLE_VALUE
|
74
74
|
raise Error, get_last_error
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
super(handle)
|
78
|
-
|
78
|
+
|
79
79
|
if block_given?
|
80
80
|
begin
|
81
81
|
yield self
|
@@ -128,12 +128,12 @@ module Win32
|
|
128
128
|
pcount = [0].pack('L')
|
129
129
|
|
130
130
|
unless ReleaseSemaphore(@handle, amount, pcount)
|
131
|
-
raise Error, get_last_error
|
131
|
+
raise Error, get_last_error
|
132
132
|
end
|
133
133
|
|
134
134
|
pcount.unpack('L').first
|
135
135
|
end
|
136
|
-
|
136
|
+
|
137
137
|
# Returns whether or not the object was opened such that a process
|
138
138
|
# created by the CreateProcess() function (a Windows API function) can
|
139
139
|
# inherit the handle. The default is true.
|
@@ -1,70 +1,65 @@
|
|
1
1
|
################################################################
|
2
|
-
#
|
2
|
+
# test_semaphore.rb
|
3
3
|
#
|
4
4
|
# Test suite for the win32-semaphore package. This test should
|
5
5
|
# be run via the 'rake test' task.
|
6
6
|
################################################################
|
7
7
|
require 'win32/semaphore'
|
8
|
-
require 'test
|
8
|
+
require 'test-unit'
|
9
9
|
include Win32
|
10
10
|
|
11
11
|
class TC_Semaphore < Test::Unit::TestCase
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
def teardown
|
67
|
-
@sem.close
|
68
|
-
@sem = nil
|
69
|
-
end
|
70
|
-
end
|
12
|
+
def setup
|
13
|
+
@sem = Semaphore.new(1, 3, 'test')
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_version
|
17
|
+
assert_equal('0.3.2', Semaphore::VERSION)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_open
|
21
|
+
assert_respond_to(Semaphore, :open)
|
22
|
+
assert_nothing_raised{ Semaphore.open('test'){} }
|
23
|
+
assert_raises(Semaphore::Error){ Semaphore.open('bogus'){} }
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_inheritable
|
27
|
+
assert_respond_to(@sem, :inheritable?)
|
28
|
+
assert_equal(true, @sem.inheritable?)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_release
|
32
|
+
assert_respond_to(@sem, :release)
|
33
|
+
assert_equal(1, @sem.release(1))
|
34
|
+
assert_equal(2, @sem.release(1))
|
35
|
+
assert_raises(Semaphore::Error){ @sem.release(99) }
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_wait
|
39
|
+
assert_respond_to(@sem, :wait)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_wait_any
|
43
|
+
assert_respond_to(@sem, :wait_any)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_wait_all
|
47
|
+
assert_respond_to(@sem, :wait_all)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_valid_constructor
|
51
|
+
assert_nothing_raised{ Semaphore.new(0, 1){} }
|
52
|
+
assert_nothing_raised{ Semaphore.new(0, 1, "foo"){} }
|
53
|
+
assert_nothing_raised{ Semaphore.new(0, 1, "foo", false){} }
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_invalid_constructor
|
57
|
+
assert_raises(TypeError){ Semaphore.new("foo", "bar"){} }
|
58
|
+
assert_raises(ArgumentError){ Semaphore.new(1, 1, "test", 1, 1){} }
|
59
|
+
end
|
60
|
+
|
61
|
+
def teardown
|
62
|
+
@sem.close
|
63
|
+
@sem = nil
|
64
|
+
end
|
65
|
+
end
|
data/win32-semaphore.gemspec
CHANGED
@@ -1,29 +1,26 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
gem.has_rdoc = true
|
14
|
-
gem.files = Dir['**/*'].reject{ |f| f.include?('CVS') }
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = 'win32-semaphore'
|
5
|
+
spec.version = '0.3.2'
|
6
|
+
spec.author = 'Daniel J. Berger'
|
7
|
+
spec.license = 'Artistic 2.0'
|
8
|
+
spec.email = 'djberg96@gmail.com'
|
9
|
+
spec.homepage = 'http://www.github.com/djberg96/win32-semaphore'
|
10
|
+
spec.summary = 'Interface to MS Windows Semaphore objects.'
|
11
|
+
spec.test_file = 'test/test_win32_semaphore.rb'
|
12
|
+
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
15
13
|
|
16
|
-
|
17
|
-
|
14
|
+
spec.rubyforge_project = 'win32utils'
|
15
|
+
spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
|
18
16
|
|
19
|
-
|
17
|
+
spec.add_dependency('win32-ipc')
|
18
|
+
spec.add_development_dependency('test-unit')
|
20
19
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
spec.description = <<-EOF
|
21
|
+
The win32-semaphore library provides an interface to semaphore objects
|
22
|
+
on MS Windows. A semaphore is a kernel object used for resource counting.
|
23
|
+
This allows threads to query the number of resources available, and wait
|
24
|
+
if there aren't any available.
|
25
|
+
EOF
|
27
26
|
end
|
28
|
-
|
29
|
-
Gem::Builder.new(spec).build
|
metadata
CHANGED
@@ -1,38 +1,50 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: win32-semaphore
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.2
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
|
-
authors:
|
7
|
+
authors:
|
7
8
|
- Daniel J. Berger
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-03-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: win32-ipc
|
16
|
+
requirement: &24606430 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
17
22
|
type: :runtime
|
18
|
-
|
19
|
-
version_requirements:
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *24606430
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: test-unit
|
27
|
+
requirement: &24606160 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *24606160
|
36
|
+
description: ! " The win32-semaphore library provides an interface to semaphore
|
37
|
+
objects\n on MS Windows. A semaphore is a kernel object used for resource counting.\n
|
38
|
+
\ This allows threads to query the number of resources available, and wait\n if
|
39
|
+
there aren't any available.\n"
|
26
40
|
email: djberg96@gmail.com
|
27
41
|
executables: []
|
28
|
-
|
29
42
|
extensions: []
|
30
|
-
|
31
|
-
extra_rdoc_files:
|
43
|
+
extra_rdoc_files:
|
32
44
|
- README
|
33
45
|
- CHANGES
|
34
46
|
- MANIFEST
|
35
|
-
files:
|
47
|
+
files:
|
36
48
|
- CHANGES
|
37
49
|
- examples/example_semaphore.rb
|
38
50
|
- lib/win32/semaphore.rb
|
@@ -41,33 +53,30 @@ files:
|
|
41
53
|
- README
|
42
54
|
- test/test_win32_semaphore.rb
|
43
55
|
- win32-semaphore.gemspec
|
44
|
-
|
45
|
-
|
46
|
-
licenses:
|
56
|
+
homepage: http://www.github.com/djberg96/win32-semaphore
|
57
|
+
licenses:
|
47
58
|
- Artistic 2.0
|
48
59
|
post_install_message:
|
49
60
|
rdoc_options: []
|
50
|
-
|
51
|
-
require_paths:
|
61
|
+
require_paths:
|
52
62
|
- lib
|
53
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
65
75
|
requirements: []
|
66
|
-
|
67
76
|
rubyforge_project: win32utils
|
68
|
-
rubygems_version: 1.
|
77
|
+
rubygems_version: 1.8.11
|
69
78
|
signing_key:
|
70
79
|
specification_version: 3
|
71
80
|
summary: Interface to MS Windows Semaphore objects.
|
72
|
-
test_files:
|
81
|
+
test_files:
|
73
82
|
- test/test_win32_semaphore.rb
|