win32-mutex 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 CHANGED
@@ -1,3 +1,9 @@
1
+ == 0.3.1 - 8-Aug-2009
2
+ * Changed license to Artistic 2.0.
3
+ * Updated the gemspec, including addition of license and description update.
4
+ * Renamed the test and example files.
5
+ * Added test-unit, win32-process and win32-mmap as development dependencies.
6
+
1
7
  == 0.3.0 - 4-May-2007
2
8
  * Now pure Ruby.
3
9
  * Both the Mutex.new and Mutex.open methods now accept a block, and
data/README CHANGED
@@ -5,6 +5,9 @@
5
5
  win32-ipc 0.5.0 or later
6
6
 
7
7
  == Installation
8
+ === Gem Installation
9
+ gem install win32-mutex
10
+ === Local Installation
8
11
  rake test (optional)
9
12
  rake install
10
13
 
@@ -21,12 +24,12 @@
21
24
  The mutex.rb file contains inline RDoc documentation. If you installed
22
25
  this file as a gem, then you have the docs.
23
26
 
24
- For an example of win32-mutex in action, look at the mutex_test.rb file
25
- in the 'examples' directory. You can also run the 'examples' rake task.
27
+ For an example of win32-mutex in action, look at the example_win32_mutex.rb
28
+ file in the 'examples' directory. You can also run the 'examples' rake task.
26
29
 
27
30
  == Notes
28
- The Mutex class is a subclass of Win32::Ipc (win32-ipc). This package
29
- require's the win32-ipc package internally (you don't need to explicitly
31
+ The Mutex class is a subclass of Win32::Ipc (win32-ipc). This library
32
+ require's the win32-ipc library internally (you don't need to explicitly
30
33
  call it).
31
34
 
32
35
  == Acknowledgements
@@ -37,10 +40,10 @@
37
40
  project page at http://www.rubyforge.net/projects/win32utils
38
41
 
39
42
  == License
40
- Ruby's
43
+ Artistic 2.0
41
44
 
42
45
  == Copyright
43
- (C) 2003-2007 Daniel J. Berger, All Rights Reserved
46
+ (C) 2003-2009 Daniel J. Berger, All Rights Reserved
44
47
 
45
48
  == Warranty
46
49
  This package is provided "as is" and without any express or
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/mutex_test.rb'
18
+ ruby '-Ilib examples/example_win32_mutex.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_mutex.rb']
26
24
  end
@@ -0,0 +1,65 @@
1
+ ##############################################################
2
+ # example_win32_mutex.rb
3
+ #
4
+ # A test script for general futzing. Modify as you see fit.
5
+ # This test script requires win32-process and win32-mmap.
6
+ ##############################################################
7
+ MUTEXNAME = "This is a very long name"
8
+
9
+ require 'win32/mutex'
10
+ require 'win32/process'
11
+ require 'win32/mmap'
12
+ include Win32
13
+
14
+ pid = Process.fork
15
+
16
+ # child_1
17
+ if pid.nil?
18
+ mm = MMap.open('test')
19
+ mx = Win32::Mutex.open(MUTEXNAME)
20
+ 5.times{
21
+ mx.wait
22
+ puts "child_1 wait "
23
+ mm.gvalue += 123
24
+ sleep 1
25
+ mm.gvalue -= 123
26
+ mx.release
27
+ puts "child_1 release "
28
+ }
29
+ exit 1
30
+ end
31
+
32
+ pid2 = Process.fork
33
+
34
+ # child_2
35
+ if pid2.nil?
36
+ mm = MMap.open('test')
37
+ mx = Win32::Mutex.open(MUTEXNAME)
38
+ 4.times{
39
+ mx.wait
40
+ puts "child_2 wait "
41
+ mm.gvalue += 456
42
+ sleep 2
43
+ mm.gvalue -= 456
44
+ mx.release
45
+ puts "child_2 release "
46
+ }
47
+ exit 1
48
+ end
49
+
50
+ #parent
51
+ mm = MMap.new(:size => 1024, :name => 'test', :inherit => true)
52
+ mm.gvalue = 5
53
+ mx = Win32::Mutex.new(false, MUTEXNAME)
54
+
55
+ 3.times{
56
+ mx.wait
57
+ puts "parent wait"
58
+ sleep 5
59
+ printf("Value of GValue=%d\n", mm.gvalue)
60
+ mx.release
61
+ puts "parent release"
62
+ }
63
+
64
+ p Process.waitpid2(pid)
65
+ p Process.waitpid2(pid2)
data/lib/win32/mutex.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 Mutex class encapsulates Windows mutex objects.
4
7
  class Mutex < Ipc
5
8
 
6
9
  # This is the error raised if any of the Mutex methods fail.
@@ -10,12 +13,12 @@ module Win32
10
13
  extend Windows::Error
11
14
  extend Windows::Handle
12
15
 
13
- VERSION = '0.3.0'
16
+ # The version of the win32-mutex library
17
+ VERSION = '0.3.1'
14
18
 
15
- # The name of the Mutex object.
16
- #
19
+ # The name of the mutex object.
17
20
  attr_reader :name
18
-
21
+
19
22
  # Creates and returns new Mutex object. If +name+ is omitted, the
20
23
  # Mutex object is created without a name, i.e. it's anonymous.
21
24
  #
@@ -33,8 +36,8 @@ module Win32
33
36
  #
34
37
  def initialize(initial_owner=false, name=nil, inherit=true)
35
38
  @initial_owner = initial_owner
36
- @name = name
37
- @inherit = inherit
39
+ @name = name
40
+ @inherit = inherit
38
41
 
39
42
  # Used to prevent potential segfaults.
40
43
  if name && !name.is_a?(String)
@@ -63,7 +66,7 @@ module Win32
63
66
  begin
64
67
  yield self
65
68
  ensure
66
- close
69
+ close # From superclass
67
70
  end
68
71
  end
69
72
  end
@@ -79,9 +82,6 @@ module Win32
79
82
  # already exist.
80
83
  #
81
84
  # If you want "open or create" semantics, then use Mutex.new.
82
- #--
83
- # The OpenMutex() call here is strictly to force an error if the user
84
- # tries to open a mutex that doesn't already exist.
85
85
  #
86
86
  def self.open(name, inherit=true, &block)
87
87
  if name && !name.is_a?(String)
@@ -89,11 +89,18 @@ module Win32
89
89
  end
90
90
 
91
91
  bool = inherit ? 1 : 0
92
- handle = OpenMutex(MUTEX_ALL_ACCESS, bool, name)
93
- if handle == 0 || handle == INVALID_HANDLE_VALUE
94
- raise Error, get_last_error
92
+
93
+ # The OpenMutex() call here is strictly to force an error if the user
94
+ # tries to open a mutex that doesn't already exist.
95
+ begin
96
+ handle = OpenMutex(MUTEX_ALL_ACCESS, bool, name)
97
+
98
+ if handle == 0 || handle == INVALID_HANDLE_VALUE
99
+ raise Error, get_last_error
100
+ end
101
+ ensure
102
+ CloseHandle(handle) if handle && handle > 0
95
103
  end
96
- CloseHandle(handle)
97
104
 
98
105
  self.new(false, name, inherit, &block)
99
106
  end
@@ -1,27 +1,33 @@
1
- #####################################################################
1
+ #######################################################################
2
2
  # tc_Win32::Mutex.rb
3
3
  #
4
- # Test suite for the win32-Win32::Mutex package. This test suite should
5
- # be run via the 'rake test' task.
6
- #####################################################################
4
+ # Test suite for the win32-Win32::Mutex package. This test suite
5
+ # should be run via the 'rake test' task.
6
+ #######################################################################
7
+ require 'rubygems'
8
+ gem 'test-unit'
9
+
7
10
  require 'test/unit'
8
11
  require 'win32/mutex'
9
12
 
10
13
  class TC_Win32_Mutex < Test::Unit::TestCase
11
14
  def setup
12
15
  @mutex = Win32::Mutex.new(true, 'test')
13
- @umutex = Win32::Mutex.new(false, "Ηελλας")
16
+ @umutex = Win32::Mutex.new(false, 'Ηελλας')
14
17
  end
15
18
 
16
19
  def test_version
17
- assert_equal('0.3.0', Win32::Mutex::VERSION)
20
+ assert_equal('0.3.1', Win32::Mutex::VERSION)
18
21
  end
19
22
 
20
23
  def test_open
21
24
  assert_respond_to(Win32::Mutex, :open)
22
- assert_nothing_raised{ Win32::Mutex.open("test"){} }
23
- assert_nothing_raised{ Win32::Mutex.open("Ηελλας"){} }
24
- assert_raises(Win32::Mutex::Error){ Win32::Mutex.open("bogus"){} }
25
+ assert_nothing_raised{ Win32::Mutex.open('test'){} }
26
+ assert_nothing_raised{ Win32::Mutex.open('Ηελλας'){} }
27
+ end
28
+
29
+ def test_open_expected_errors
30
+ assert_raise(Win32::Mutex::Error){ Win32::Mutex.open('bogus'){} }
25
31
  end
26
32
 
27
33
  def test_release
@@ -31,13 +37,13 @@ class TC_Win32_Mutex < Test::Unit::TestCase
31
37
 
32
38
  def test_initial_owner
33
39
  assert_respond_to(@mutex, :initial_owner?)
34
- assert_equal(true, @mutex.initial_owner?)
35
- assert_equal(false, @umutex.initial_owner?)
40
+ assert_true(@mutex.initial_owner?)
41
+ assert_false(@umutex.initial_owner?)
36
42
  end
37
43
 
38
44
  def test_inheritable
39
45
  assert_respond_to(@mutex, :inheritable?)
40
- assert_equal(true, @mutex.inheritable?)
46
+ assert_true(@mutex.inheritable?)
41
47
  end
42
48
 
43
49
  def test_wait
data/win32-mutex.gemspec CHANGED
@@ -1,24 +1,33 @@
1
- require "rubygems"
1
+ require 'rubygems'
2
2
 
3
3
  spec = Gem::Specification.new do |gem|
4
- gem.name = "win32-mutex"
5
- gem.version = "0.3.0"
6
- gem.author = "Daniel J. Berger"
7
- gem.email = "djberg96@gmail.com"
8
- gem.homepage = "http://www.rubyforge.org/projects/win32utils"
9
- gem.platform = Gem::Platform::RUBY
10
- gem.summary = "Interface to MS Windows Mutex objects."
11
- gem.description = "Interface to MS Windows Mutex objects."
12
- gem.test_file = "test/tc_mutex.rb"
13
- gem.has_rdoc = true
14
- gem.files = Dir["lib/win32/*.rb"] + Dir["test/*"] + Dir["[A-Z]*"]
15
- gem.files.reject! { |fn| fn.include? "CVS" }
16
- gem.require_path = "lib"
17
- gem.extra_rdoc_files = ["README", "CHANGES", "MANIFEST"]
18
- gem.add_dependency("win32-ipc", ">= 0.5.0")
19
- end
4
+ gem.name = 'win32-mutex'
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'
10
+ gem.platform = Gem::Platform::RUBY
11
+ gem.summary = 'Interface to MS Windows Mutex objects.'
12
+ gem.test_file = 'test/test_win32_mutex.rb'
13
+ gem.has_rdoc = true
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
- if $0 == __FILE__
22
- Gem.manage_gems
23
- Gem::Builder.new(spec).build
19
+ gem.add_dependency('win32-ipc', '>= 0.5.0')
20
+
21
+ gem.add_development_dependency('test-unit', '>= 2.0.3')
22
+ gem.add_development_dependency('win32-process', '>= 0.6.1')
23
+ gem.add_development_dependency('win32-mmap', '>= 0.2.2')
24
+
25
+ gem.description = <<-EOF
26
+ The win32-mutex library provides an interface for creating mutex objects
27
+ on MS Windows. A mutex object is a synchronization object whose state
28
+ is set to signaled when it is not owned by any thread, and non-signaled
29
+ when it is owned.
30
+ EOF
24
31
  end
32
+
33
+ Gem::Builder.new(spec).build
metadata CHANGED
@@ -1,67 +1,103 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.2
3
- specification_version: 1
4
2
  name: win32-mutex
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.3.0
7
- date: 2007-05-04 00:00:00 -06:00
8
- summary: Interface to MS Windows Mutex 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 Mutex 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
31
- files:
32
- - lib/win32/mutex.rb
33
- - test/CVS
34
- - test/tc_mutex.rb
35
- - CHANGES
36
- - CVS
37
- - examples
38
- - lib
39
- - MANIFEST
40
- - Rakefile
41
- - README
42
- - test
43
- - win32-mutex.gemspec
44
- test_files:
45
- - test/tc_mutex.rb
46
- rdoc_options: []
47
-
48
- extra_rdoc_files:
49
- - README
50
- - CHANGES
51
- - MANIFEST
52
- executables: []
53
-
54
- extensions: []
55
-
56
- requirements: []
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
57
11
 
12
+ date: 2009-08-08 00:00:00 -06:00
13
+ default_executable:
58
14
  dependencies:
59
15
  - !ruby/object:Gem::Dependency
60
16
  name: win32-ipc
17
+ type: :runtime
61
18
  version_requirement:
62
- version_requirements: !ruby/object:Gem::Version::Requirement
19
+ version_requirements: !ruby/object:Gem::Requirement
63
20
  requirements:
64
21
  - - ">="
65
22
  - !ruby/object:Gem::Version
66
23
  version: 0.5.0
67
24
  version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: test-unit
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.0.3
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: win32-process
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.6.1
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: win32-mmap
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.2.2
54
+ version:
55
+ description: " The win32-mutex library provides an interface for creating mutex objects\n on MS Windows. A mutex object is a synchronization object whose state\n is set to signaled when it is not owned by any thread, and non-signaled\n when it is owned.\n"
56
+ email: djberg96@gmail.com
57
+ executables: []
58
+
59
+ extensions: []
60
+
61
+ extra_rdoc_files:
62
+ - README
63
+ - CHANGES
64
+ - MANIFEST
65
+ files:
66
+ - CHANGES
67
+ - examples/example_win32_mutex.rb
68
+ - lib/win32/mutex.rb
69
+ - MANIFEST
70
+ - Rakefile
71
+ - README
72
+ - test/test_win32_mutex.rb
73
+ - win32-mutex.gemspec
74
+ has_rdoc: true
75
+ homepage: http://www.rubyforge.org/projects/win32utils
76
+ licenses:
77
+ - Artistic 2.0
78
+ post_install_message:
79
+ rdoc_options: []
80
+
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: "0"
88
+ version:
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: "0"
94
+ version:
95
+ requirements: []
96
+
97
+ rubyforge_project: win32utils
98
+ rubygems_version: 1.3.5
99
+ signing_key:
100
+ specification_version: 3
101
+ summary: Interface to MS Windows Mutex objects.
102
+ test_files:
103
+ - test/test_win32_mutex.rb