rbbt-util 5.13.14 → 5.13.15

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 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