oni 4.2.3 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/oni/daemon.rb +25 -20
  3. data/lib/oni/version.rb +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 430375f85e0f8d617f53487863c6a4752680fd1d8b5a67cc78529d757e5b5389
4
- data.tar.gz: c26f8f5b3457c28145c3e689b6490026dd073b9ea4a5acea06ab9f198d405397
3
+ metadata.gz: 19d78db0264593a2aea45885eed49c3cf655379b730708ffb9d0d3449f0738fe
4
+ data.tar.gz: d4f9a83030eccd4cdfd786605c1c982f997ad037c922301fecf747915434adda
5
5
  SHA512:
6
- metadata.gz: 38ef45f00263093e39de7f38051ad170c48f9578907230d2c1ddd98542bc9c1bc012322e17317e9ceac32ea5d07be8e7ffbabc3f6a62cb9d5f995f6f1ca8449e
7
- data.tar.gz: 6799c07046351f56671e1863677e626021dc724196b94404b42f6dc7e8df64c3784ff77a864f7af7b2f2951ed7432e8dedee1a60a9a7fd4c9308ec14c728a7eb
6
+ metadata.gz: f9de57477ff466dca18c6e8e20fb6395e56a4d3dbbecd42d39aa64299e04c88fb8367e02d319ab7143a4a2b97da027be173a956c7f0aa98920c5f58b6ed9c982
7
+ data.tar.gz: e809d85d9615508e2f5e59aa8697e4d7b14727c415178e5b977986db69749561d588614d62d6ad4bfe71ed3494fa5d1df4bee5e336fe169fef334ae21df951e3
data/lib/oni/daemon.rb CHANGED
@@ -41,7 +41,7 @@ module Oni
41
41
  # is defined.
42
42
  #
43
43
  def initialize
44
- @daemon_workers = {}
44
+ @daemon_workers = Hash.new{ |h, k| h[k] = [] }
45
45
 
46
46
  after_initialize if respond_to?(:after_initialize)
47
47
  end
@@ -56,19 +56,15 @@ module Oni
56
56
  def start
57
57
  before_start if respond_to? :before_start
58
58
 
59
- return run_thread if threads <= 1
60
- return spawn_worker if workers <= 1
59
+ wthreads = if threads <= 1 then [run_thread]
60
+ elsif workers <= 1 then standard_worker
61
+ else wthreads = Array.new(workers).map{ |i| spawn_worker i } end
61
62
 
62
- threads = Array.new workers do |i|
63
- Thread.new do
64
- Process.wait fork{ spawn_worker i+1 } while true
65
- end
66
- end
67
-
68
- sleep 3
69
63
  after_start if respond_to? :after_start
70
64
 
71
- threads.each(&:join)
65
+ %i[INT TERM].each{ |sig| trap(sig){ stop } }
66
+ wthreads.each(&:join) if workers > 1
67
+
72
68
  rescue => error
73
69
  error(error)
74
70
  end
@@ -188,11 +184,22 @@ module Oni
188
184
  #
189
185
  # @return [Thread]
190
186
  #
191
- def spawn_worker i = nil
192
- Process.setproctitle "#{$0}: worker #{i}" if i
187
+ def spawn_worker i = nil, &block
188
+ Thread.new do
189
+ loop do # keep restarting for OOM and other cases
190
+ pid = fork do
191
+ Process.setproctitle "#{$0}: worker #{i}" if i
193
192
 
194
- daemon_workers[Process.pid] = Array.new threads do
195
- spawn_thread
193
+ if block then yield else standard_worker end
194
+ end
195
+ Process.wait pid
196
+ end
197
+ end
198
+ end
199
+
200
+ def standard_worker
201
+ Array.new(threads).map do
202
+ spawn_thread.tap{ |t| daemon_workers[Process.pid] << t }
196
203
  end.each(&:join)
197
204
  end
198
205
 
@@ -202,11 +209,9 @@ module Oni
202
209
  # @return [Thread]
203
210
  #
204
211
  def spawn_thread
205
- thread = Thread.new { run_thread }
206
-
207
- thread.abort_on_exception = true
208
-
209
- return thread
212
+ Thread.new{ run_thread }.tap do |t|
213
+ t.abort_on_exception = true
214
+ end
210
215
  end
211
216
 
212
217
  ##
data/lib/oni/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Oni
2
- VERSION = '4.2.3'
2
+ VERSION = '4.3.0'
3
3
  end # Oni
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oni
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.3
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yorick Peterse
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-06-01 00:00:00.000000000 Z
12
+ date: 2022-06-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake