rbbt-util 5.13.14 → 5.13.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5399e9cd15518ddd19400ba2cf089758cb0e60d2
4
- data.tar.gz: 8adfd1f1ec5293cfcd1aa4749ed8ba84aba078c4
3
+ metadata.gz: 1433dd5623914600b8afbbea35540e0d63878d80
4
+ data.tar.gz: 97f4771293edb91ef2148112cb9205e53beb80ed
5
5
  SHA512:
6
- metadata.gz: 132f5a6172cd496d7cadc66affcfc73251fc35b73f1cf458521d08726f766597957d095d029ddc6f3a14cb6f880599ba6576a6c91fbee2fcda7bbde8919c1ca9
7
- data.tar.gz: 3cd484b4a5cdf42edae4d19698f8ee780812785d033ccac47b26e9f326fbe5413c977f922344d59a1b715ed703fdfe48a0cce494f312c2f7047281532afedbc5
6
+ metadata.gz: 579ae60be7d927a9074f246d163c6afa13495d6f1d499577c7d3e11ee6c516ada13d1b5c877f5d937a59f4d2f7f720a6820d53f2e7eacd4788af26ff28c14644
7
+ data.tar.gz: 2a6b66e90b23530d6563322539f27c1634f5483bcd245177154a466b68596c5c5e7821deec972a609d21b524f9c6d2c4ac71fc212cbbad0c4de349de2a3ea851
@@ -22,7 +22,7 @@ module RbbtSemaphore
22
22
 
23
23
  builder.c_singleton <<-EOF
24
24
  void create_semaphore(char* name, int value){
25
- sem_open(name, O_CREAT, S_IRWXU, value);
25
+ sem_open(name, O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO, value);
26
26
  }
27
27
  EOF
28
28
  builder.c_singleton <<-EOF
@@ -34,7 +34,7 @@ void delete_semaphore(char* name){
34
34
  builder.c_singleton <<-EOF
35
35
  void wait_semaphore(char* name){
36
36
  sem_t* sem;
37
- sem = sem_open(name, O_EXCL);
37
+ sem = sem_open(name, 0);
38
38
  sem_wait(sem);
39
39
  sem_close(sem);
40
40
  }
@@ -43,29 +43,35 @@ void wait_semaphore(char* name){
43
43
  builder.c_singleton <<-EOF
44
44
  void post_semaphore(char* name){
45
45
  sem_t* sem;
46
- sem = sem_open(name, O_EXCL);
46
+ sem = sem_open(name, 0);
47
47
  sem_post(sem);
48
48
  sem_close(sem);
49
49
  }
50
50
  EOF
51
51
  end
52
52
 
53
+ SEM_MUTEX = Mutex.new
53
54
  def self.synchronize(sem)
54
- RbbtSemaphore.wait_semaphore(sem)
55
+ SEM_MUTEX.synchronize do
56
+ RbbtSemaphore.wait_semaphore(sem)
57
+ end
55
58
  begin
56
59
  yield
57
60
  ensure
58
- RbbtSemaphore.post_semaphore(sem)
61
+ SEM_MUTEX.synchronize do
62
+ RbbtSemaphore.post_semaphore(sem)
63
+ end
59
64
  end
60
65
  end
61
66
 
62
67
  def self.with_semaphore(size, file = nil)
63
- file = Misc.digest(rand.to_s) if file.nil?
68
+ file = "/" << Misc.digest(rand(1000000000000).to_s) if file.nil?
64
69
  file.gsub!('/', '_')
65
70
  begin
66
71
  RbbtSemaphore.create_semaphore(file, size)
67
72
  yield file
68
73
  ensure
74
+ Log.error "Removing semaphore #{ file }"
69
75
  RbbtSemaphore.delete_semaphore(file)
70
76
  end
71
77
  end
@@ -44,6 +44,7 @@ else
44
44
 
45
45
  puts "File: #{ file }"
46
46
  puts "Type: #{header.type}"
47
+ puts "Namespace: #{header.namespace}"
47
48
  puts "Key: #{Log.color :yellow, header.key_field}"
48
49
  puts "Fields: "
49
50
  if header.fields.nil?
@@ -2,7 +2,26 @@ require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helpe
2
2
  require 'rbbt/util/semaphore'
3
3
 
4
4
  class TestRbbtSemaphore < Test::Unit::TestCase
5
- def test_thread
5
+ def test_process
6
+ RbbtSemaphore.with_semaphore(10) do |s|
7
+ pids = []
8
+ 100.times do
9
+ pids << Process.fork do
10
+ 100.times do
11
+ RbbtSemaphore.wait_semaphore(s)
12
+ sleep 0.001
13
+ puts '.'
14
+ RbbtSemaphore.post_semaphore(s)
15
+ end
16
+ end
17
+ end
18
+ pids.each do |pid|
19
+ Process.waitpid pid
20
+ end
21
+ end
22
+ end
23
+
24
+ def _test_thread
6
25
  times = 50
7
26
  TmpFile.with_file do |dir|
8
27
  Path.setup(dir)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.13.14
4
+ version: 5.13.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez