service_skeleton 0.0.0.16.g99ff4d7 → 0.0.0.20.gb9a0460
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 +4 -4
- data/.editorconfig +7 -0
- data/lib/service_skeleton/background_worker.rb +13 -4
- data/lib/service_skeleton/signal_handler.rb +18 -10
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 651f874d0096f67e63ff46f957125c53b032861d34b6b43cfdfb2113eca7ad65
|
4
|
+
data.tar.gz: 78c72f06cb3693d10d9c02338191eb0fef4a8171a97a138c01c42374133ecef6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59635704ca571789796e46449916154cbcc4194e39a6bf754c564490e7acd4a3217e32693090920b8c5195672f6d602426e85b80f52fec5bc9d6f4d3dd2c6f35
|
7
|
+
data.tar.gz: b67dd4d48fe6c468f10b7e34deb54195eee9f55e460f8179714228f727e5ff941f1200347825e8108fdb17ccd97da0b00d53431adb887b7ac37ee941ad3bd55d
|
data/.editorconfig
ADDED
@@ -54,15 +54,24 @@ class ServiceSkeleton
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
def stop!
|
57
|
+
def stop!(force = nil)
|
58
58
|
@bg_worker_op_mutex.synchronize do
|
59
59
|
return if @bg_worker_thread.nil?
|
60
60
|
|
61
|
-
logger.debug("BackgroundWorker(#{self.class})#stop!") { "Terminating worker thread #{
|
61
|
+
logger.debug("BackgroundWorker(#{self.class})#stop!") { "Terminating worker thread #{@bg_worker_thread.object_id} as requested" }
|
62
62
|
|
63
|
-
|
63
|
+
if force == :force
|
64
|
+
@bg_worker_thread.raise(TerminateBackgroundThread)
|
65
|
+
else
|
66
|
+
shutdown
|
67
|
+
end
|
68
|
+
|
69
|
+
begin
|
70
|
+
@bg_worker_thread.join unless @bg_worker_thread == Thread.current
|
71
|
+
rescue TerminateBackgroundThread
|
72
|
+
nil
|
73
|
+
end
|
64
74
|
|
65
|
-
@bg_worker_thread.join
|
66
75
|
@bg_worker_thread = nil
|
67
76
|
|
68
77
|
logger.debug("BackgroundWorker(#{self.class})#stop!") { "Worker thread terminated" }
|
@@ -42,6 +42,8 @@ class ServiceSkeleton
|
|
42
42
|
|
43
43
|
@signal_registry = []
|
44
44
|
|
45
|
+
@handler_install_mutex = Mutex.new
|
46
|
+
|
45
47
|
super
|
46
48
|
end
|
47
49
|
|
@@ -62,16 +64,18 @@ class ServiceSkeleton
|
|
62
64
|
# specifier by `Signal.trap`.
|
63
65
|
#
|
64
66
|
def hook_signal(sig, &blk)
|
65
|
-
|
66
|
-
handler_num = @signal_registry.length
|
67
|
+
logger.debug(logloc) { "Hooking signal #{sig}" }
|
67
68
|
|
68
|
-
|
69
|
-
raise RuntimeError,
|
70
|
-
"Signal hook limit reached. Slow down there, pardner"
|
71
|
-
end
|
69
|
+
handler_num = @signal_registry.length
|
72
70
|
|
73
|
-
|
71
|
+
if handler_num > 255
|
72
|
+
raise RuntimeError,
|
73
|
+
"Signal hook limit reached. Slow down there, pardner"
|
74
|
+
end
|
74
75
|
|
76
|
+
sigspec = { signal: sig, callback: blk }
|
77
|
+
|
78
|
+
@handler_install_mutex.synchronize do
|
75
79
|
if @bg_worker_thread
|
76
80
|
install_handler(sigspec, handler_num)
|
77
81
|
else
|
@@ -84,11 +88,13 @@ class ServiceSkeleton
|
|
84
88
|
end
|
85
89
|
|
86
90
|
def start
|
87
|
-
|
91
|
+
@handler_install_mutex.synchronize do
|
92
|
+
logger.info(logloc) { "Starting signal handler with #{@signal_registry.length} hooks" }
|
88
93
|
|
89
|
-
|
94
|
+
@r, @w = IO.pipe
|
90
95
|
|
91
|
-
|
96
|
+
install_signal_handlers
|
97
|
+
end
|
92
98
|
|
93
99
|
loop do
|
94
100
|
begin
|
@@ -99,6 +105,7 @@ class ServiceSkeleton
|
|
99
105
|
break
|
100
106
|
else
|
101
107
|
c = ios.first.first.read_nonblock(1)
|
108
|
+
logger.debug(logloc) { "Received character #{c.inspect} from signal pipe" }
|
102
109
|
handle_signal(c)
|
103
110
|
end
|
104
111
|
else
|
@@ -146,6 +153,7 @@ class ServiceSkeleton
|
|
146
153
|
end
|
147
154
|
|
148
155
|
def install_handler(sigspec, i)
|
156
|
+
logger.debug(logloc) { "Installing signal handler for #{sigspec[:signal]}" }
|
149
157
|
chain = nil
|
150
158
|
|
151
159
|
p = ->(*args) do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: service_skeleton
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.0.
|
4
|
+
version: 0.0.0.20.gb9a0460
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Palmer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: frankenstein
|
@@ -261,6 +261,7 @@ executables: []
|
|
261
261
|
extensions: []
|
262
262
|
extra_rdoc_files: []
|
263
263
|
files:
|
264
|
+
- ".editorconfig"
|
264
265
|
- ".gitignore"
|
265
266
|
- ".rubocop.yml"
|
266
267
|
- ".travis.yml"
|