oni 4.2.1 → 4.3.0

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