win32-semaphore 0.3.0 → 0.3.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.
- data/CHANGES +6 -0
- data/MANIFEST +2 -2
- data/README +4 -4
- data/Rakefile +1 -3
- data/examples/example_semaphore.rb +40 -0
- data/lib/win32/semaphore.rb +19 -9
- data/test/{tc_semaphore.rb → test_win32_semaphore.rb} +1 -1
- data/win32-semaphore.gemspec +23 -18
- metadata +57 -52
data/CHANGES
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 0.3.1 - 11-Aug-2009
|
2
|
+
* Changed license to Artistic 2.0.
|
3
|
+
* The Semaphore.open method is now slightly more robust.
|
4
|
+
* Renamed the test and example files.
|
5
|
+
* Some gemspec updates, including license and description.
|
6
|
+
|
1
7
|
== 0.3.0 - 3-May-2007
|
2
8
|
* Now pure Ruby.
|
3
9
|
* Added a Rakefile, with test, install and example tasks.
|
data/MANIFEST
CHANGED
data/README
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
rake install
|
10
10
|
|
11
11
|
== Synopsis
|
12
|
-
require
|
12
|
+
require 'win32/semaphore'
|
13
13
|
include Win32
|
14
14
|
|
15
15
|
Semaphore.new(1, 5, 'test') do |sem|
|
@@ -18,7 +18,7 @@
|
|
18
18
|
end
|
19
19
|
|
20
20
|
== Documentation
|
21
|
-
The
|
21
|
+
The semaphore.rb file contains inline RDoc documentation. If you installed
|
22
22
|
this file as a gem, then you have the docs.
|
23
23
|
|
24
24
|
For more detailed documentation about Semaphores on MS Windows in general,
|
@@ -42,10 +42,10 @@
|
|
42
42
|
Suggestions welcome.
|
43
43
|
|
44
44
|
== License
|
45
|
-
|
45
|
+
Artistic 2.0
|
46
46
|
|
47
47
|
== Copyright
|
48
|
-
(C) 2003-
|
48
|
+
(C) 2003-2009 Daniel J. Berger
|
49
49
|
All Rights Reserved
|
50
50
|
|
51
51
|
== Warranty
|
data/Rakefile
CHANGED
@@ -15,12 +15,10 @@ end
|
|
15
15
|
|
16
16
|
desc 'Run the example program'
|
17
17
|
task :example do
|
18
|
-
ruby '-Ilib examples/
|
18
|
+
ruby '-Ilib examples/example_semaphore.rb'
|
19
19
|
end
|
20
20
|
|
21
21
|
Rake::TestTask.new do |t|
|
22
|
-
t.libs << 'test'
|
23
22
|
t.verbose = true
|
24
23
|
t.warning = true
|
25
|
-
t.test_files = FileList['test/tc_semaphore.rb']
|
26
24
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
##############################################################
|
2
|
+
# example_semaphore.rb
|
3
|
+
#
|
4
|
+
# A test script for general futzing. Modify as you see fit.
|
5
|
+
#
|
6
|
+
# Note that you can run this via the 'rake example' task.
|
7
|
+
##############################################################
|
8
|
+
require "win32/semaphore"
|
9
|
+
include Win32
|
10
|
+
|
11
|
+
test = 1
|
12
|
+
s = Semaphore.new(3,3,"test")
|
13
|
+
test += 1
|
14
|
+
puts "ok #{test}"
|
15
|
+
|
16
|
+
print 'not ' unless s.wait(10) > 0
|
17
|
+
test += 1
|
18
|
+
puts "ok #{test}"
|
19
|
+
|
20
|
+
print 'not ' unless s.wait(0) > 0
|
21
|
+
test += 1
|
22
|
+
puts "ok #{test}"
|
23
|
+
|
24
|
+
printf "If you don't see 'ok %d' immediately, you'd better hit Ctrl-C\n", test+1
|
25
|
+
print 'not ' unless s.wait > 0
|
26
|
+
test += 1
|
27
|
+
puts "ok #{test}"
|
28
|
+
|
29
|
+
print 'not ' if s.wait(0) > 0
|
30
|
+
test += 1
|
31
|
+
puts "ok #{test}"
|
32
|
+
|
33
|
+
s.release
|
34
|
+
s.release(1)
|
35
|
+
|
36
|
+
print 'not ' unless (result = s.release(1)) == 2
|
37
|
+
test += 1
|
38
|
+
puts "ok #{test}\t(result is #{result})"
|
39
|
+
|
40
|
+
s.close
|
data/lib/win32/semaphore.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'win32/ipc'
|
2
2
|
|
3
|
+
# The Win32 module serves as a namespace only.
|
3
4
|
module Win32
|
5
|
+
|
6
|
+
# The Semaphore class encapsulates semaphore objects on Windows.
|
4
7
|
class Semaphore < Ipc
|
5
8
|
|
6
9
|
# This is the error raised if any of the Semaphore methods fail.
|
@@ -10,7 +13,8 @@ module Win32
|
|
10
13
|
extend Windows::Error
|
11
14
|
extend Windows::Handle
|
12
15
|
|
13
|
-
|
16
|
+
# The version of the win32-semaphore library
|
17
|
+
VERSION = '0.3.1'
|
14
18
|
|
15
19
|
# The initial count for the semaphore object. This value must be greater
|
16
20
|
# than or equal to zero and less than or equal to +max_count+. The state
|
@@ -92,21 +96,25 @@ module Win32
|
|
92
96
|
# the semaphore doesn't already exist.
|
93
97
|
#
|
94
98
|
# If you want "open or create" semantics, then use Semaphore.new.
|
95
|
-
#--
|
96
|
-
# The OpenSemaphore() call here is strictly to force an error if the user
|
97
|
-
# tries to open a semaphore that doesn't already exist.
|
98
99
|
#
|
99
100
|
def self.open(name, inherit=true, &block)
|
100
101
|
if name && !name.is_a?(String)
|
101
102
|
raise TypeError, 'name must be a string'
|
102
103
|
end
|
103
|
-
|
104
|
+
|
104
105
|
bool = inherit ? 1 : 0
|
105
|
-
|
106
|
-
|
107
|
-
|
106
|
+
|
107
|
+
# The OpenSemaphore() call here is strictly to force an error if the
|
108
|
+
# user tries to open a semaphore that doesn't already exist.
|
109
|
+
begin
|
110
|
+
handle = OpenSemaphore(SEMAPHORE_ALL_ACCESS, bool, name)
|
111
|
+
|
112
|
+
if handle == 0 || handle == INVALID_HANDLE_VALUE
|
113
|
+
raise Error, get_last_error
|
114
|
+
end
|
115
|
+
ensure
|
116
|
+
CloseHandle(handle)
|
108
117
|
end
|
109
|
-
CloseHandle(handle)
|
110
118
|
|
111
119
|
self.new(0, 1, name, inherit, &block)
|
112
120
|
end
|
@@ -118,9 +126,11 @@ module Win32
|
|
118
126
|
#
|
119
127
|
def release(amount = 1)
|
120
128
|
pcount = [0].pack('L')
|
129
|
+
|
121
130
|
unless ReleaseSemaphore(@handle, amount, pcount)
|
122
131
|
raise Error, get_last_error
|
123
132
|
end
|
133
|
+
|
124
134
|
pcount.unpack('L').first
|
125
135
|
end
|
126
136
|
|
data/win32-semaphore.gemspec
CHANGED
@@ -1,24 +1,29 @@
|
|
1
|
-
require
|
1
|
+
require 'rubygems'
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |gem|
|
4
|
-
gem.name =
|
5
|
-
gem.version =
|
6
|
-
gem.author =
|
7
|
-
gem.
|
8
|
-
gem.
|
4
|
+
gem.name = 'win32-semaphore'
|
5
|
+
gem.version = '0.3.1'
|
6
|
+
gem.author = 'Daniel J. Berger'
|
7
|
+
gem.license = 'Artistic 2.0'
|
8
|
+
gem.email = 'djberg96@gmail.com'
|
9
|
+
gem.homepage = 'http://www.rubyforge.org/projects/win32utils'
|
9
10
|
gem.platform = Gem::Platform::RUBY
|
10
|
-
gem.summary =
|
11
|
-
gem.
|
12
|
-
gem.test_file = "test/tc_semaphore.rb"
|
11
|
+
gem.summary = 'Interface to MS Windows Semaphore objects.'
|
12
|
+
gem.test_file = 'test/test_win32_semaphore.rb'
|
13
13
|
gem.has_rdoc = true
|
14
|
-
gem.files = Dir[
|
15
|
-
|
16
|
-
gem.
|
17
|
-
gem.extra_rdoc_files
|
18
|
-
gem.add_dependency("win32-ipc", ">= 0.5.0")
|
19
|
-
end
|
14
|
+
gem.files = Dir['**/*'].reject{ |f| f.include?('CVS') }
|
15
|
+
|
16
|
+
gem.rubyforge_project = 'win32utils'
|
17
|
+
gem.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
|
20
18
|
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
gem.add_dependency('win32-ipc')
|
20
|
+
|
21
|
+
gem.description = <<-EOF
|
22
|
+
The win32-semaphore library provides an interface to semaphore objects
|
23
|
+
on MS Windows. A semaphore is a kernel object used for resource counting.
|
24
|
+
This allows threads to query the number of resources available, and wait
|
25
|
+
if there aren't any available.
|
26
|
+
EOF
|
24
27
|
end
|
28
|
+
|
29
|
+
Gem::Builder.new(spec).build
|
metadata
CHANGED
@@ -1,68 +1,73 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.2
|
3
|
-
specification_version: 1
|
4
2
|
name: win32-semaphore
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.3.
|
7
|
-
date: 2007-05-03 00:00:00 -06:00
|
8
|
-
summary: Interface to MS Windows Semaphore objects.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: djberg96@gmail.com
|
12
|
-
homepage: http://www.rubyforge.org/projects/win32utils
|
13
|
-
rubyforge_project:
|
14
|
-
description: Interface to MS Windows Semaphore objects.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.3.1
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Daniel J. Berger
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-08-11 00:00:00 -06:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: win32-ipc
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description: " The win32-semaphore library provides an interface to semaphore objects\n on MS Windows. A semaphore is a kernel object used for resource counting.\n This allows threads to query the number of resources available, and wait\n if there aren't any available.\n"
|
26
|
+
email: djberg96@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- README
|
33
|
+
- CHANGES
|
34
|
+
- MANIFEST
|
31
35
|
files:
|
32
|
-
- lib/win32/semaphore.rb
|
33
|
-
- test/CVS
|
34
|
-
- test/tc_semaphore.rb
|
35
36
|
- CHANGES
|
36
|
-
-
|
37
|
-
-
|
38
|
-
- examples
|
39
|
-
- lib
|
37
|
+
- examples/example_semaphore.rb
|
38
|
+
- lib/win32/semaphore.rb
|
40
39
|
- MANIFEST
|
41
40
|
- Rakefile
|
42
41
|
- README
|
43
|
-
- test
|
42
|
+
- test/test_win32_semaphore.rb
|
44
43
|
- win32-semaphore.gemspec
|
45
|
-
|
46
|
-
|
44
|
+
has_rdoc: true
|
45
|
+
homepage: http://www.rubyforge.org/projects/win32utils
|
46
|
+
licenses:
|
47
|
+
- Artistic 2.0
|
48
|
+
post_install_message:
|
47
49
|
rdoc_options: []
|
48
50
|
|
49
|
-
|
50
|
-
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
58
|
+
version:
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: "0"
|
64
|
+
version:
|
57
65
|
requirements: []
|
58
66
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: 0.5.0
|
68
|
-
version:
|
67
|
+
rubyforge_project: win32utils
|
68
|
+
rubygems_version: 1.3.5
|
69
|
+
signing_key:
|
70
|
+
specification_version: 3
|
71
|
+
summary: Interface to MS Windows Semaphore objects.
|
72
|
+
test_files:
|
73
|
+
- test/test_win32_semaphore.rb
|