oni 4.2.1 → 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 +28 -18
  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: 84e61e1f126f7c501b4182d2322fec884ed1919a1e390c07f260e9a6ff06f3ed
4
- data.tar.gz: a0f2c4f830f421199d548b328455b7db84888a508b1135d1738f4733b6f3d479
3
+ metadata.gz: 19d78db0264593a2aea45885eed49c3cf655379b730708ffb9d0d3449f0738fe
4
+ data.tar.gz: d4f9a83030eccd4cdfd786605c1c982f997ad037c922301fecf747915434adda
5
5
  SHA512:
6
- metadata.gz: 5301a19390c41d67d0ae4517f4cdf37450d86f9ac2b756339de309cb1a4c1aa0be9584609c1a40d58c997c9dab0445b218e9889565914460f9e2a3c798b4e91f
7
- data.tar.gz: 8cd91c4be8cb85e570bd0108b0b70bd0a8571e32d5ee0220de132380f368832f9df4578a199b48e8bcd91373ed7ced89fdba700f60bc1f5a922b8a855816a744
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
@@ -54,16 +54,17 @@ module Oni
54
54
  # before starting the daemon.
55
55
  #
56
56
  def start
57
- before_start if respond_to?(:before_start)
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
62
+
63
+ after_start if respond_to? :after_start
64
+
65
+ %i[INT TERM].each{ |sig| trap(sig){ stop } }
66
+ wthreads.each(&:join) if workers > 1
61
67
 
62
- Array.new workers do |i|
63
- Thread.new do
64
- Process.wait fork{ spawn_worker i+1 } while true
65
- end
66
- end.each(&:join)
67
68
  rescue => error
68
69
  error(error)
69
70
  end
@@ -183,11 +184,22 @@ module Oni
183
184
  #
184
185
  # @return [Thread]
185
186
  #
186
- def spawn_worker i = nil
187
- 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
188
192
 
189
- daemon_workers[Process.pid] = Array.new threads do
190
- 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 }
191
203
  end.each(&:join)
192
204
  end
193
205
 
@@ -197,11 +209,9 @@ module Oni
197
209
  # @return [Thread]
198
210
  #
199
211
  def spawn_thread
200
- thread = Thread.new { run_thread }
201
-
202
- thread.abort_on_exception = true
203
-
204
- return thread
212
+ Thread.new{ run_thread }.tap do |t|
213
+ t.abort_on_exception = true
214
+ end
205
215
  end
206
216
 
207
217
  ##
data/lib/oni/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Oni
2
- VERSION = '4.2.1'
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.1
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: 2021-12-22 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