trident 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG +5 -0
- data/lib/trident/signal_handler.rb +7 -5
- data/lib/trident/version.rb +1 -1
- data/test/unit/trident/signal_handler_test.rb +45 -18
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NWVkOTkzYzA0Y2Y4NGJjODIzZWI2ZjJmNzExOWQ3YWUyN2I3ZDQ2OA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YThjMjE1Y2Q4MWM1YWRiMDI4ZWU1N2ViNzMzNjg2NWNmM2FiMjdhZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OWNjOTRiYWE4YTUxMmI0ZWQ0MWZhOWEyMjc0ZWM5YTgzMGYxMmRjYTM3ODI3
|
10
|
+
MDU4ZWZiMDY0Mzc5ZTRlMTk0ZTBiN2MwZDI0YThhZjY5MjgwZDJkMGMxNDU5
|
11
|
+
ZTU0NDlmMDVkMzc1OGEwOTFmMjFlMDMxZDBmODk1NWI5OTJhMTc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
M2E4NTFmOTc2OWFlNzg2YWZmMGY4YmViODExNGQyYmEwODNlMzY2MjgyNjlh
|
14
|
+
ODI5Y2IyZmIzNTg0M2ZkMzQyOWE4NjZkN2UwMjY2NWNjMmE2MzZlZDI0NjRm
|
15
|
+
MDc1NmYzOGYxNTU1MGIzYzJlY2MwNmVhYWZlNzBkM2NiZTliNjM=
|
data/CHANGELOG
CHANGED
@@ -118,10 +118,6 @@ module Trident
|
|
118
118
|
|
119
119
|
@signal_mappings[k] = Array(v)
|
120
120
|
end
|
121
|
-
|
122
|
-
# Should always handle CHLD signals as they wakeup/drive the main
|
123
|
-
# loop on status changes from child processes
|
124
|
-
@signal_mappings = {"SIGCHLD" => ["update"]}.merge(@signal_mappings)
|
125
121
|
end
|
126
122
|
|
127
123
|
def setup_self_pipe
|
@@ -143,7 +139,13 @@ module Trident
|
|
143
139
|
|
144
140
|
def reset_signal_handlers
|
145
141
|
original_signal_handlers.each do |signal_name, original_handler|
|
146
|
-
|
142
|
+
if signal_name == "SIGCHLD" && original_handler == nil
|
143
|
+
# SIGCHLD handler needs to be default for stuff like
|
144
|
+
# Process.detach to work correctly
|
145
|
+
trap(signal_name, "DEFAULT")
|
146
|
+
else
|
147
|
+
trap(signal_name, original_handler)
|
148
|
+
end
|
147
149
|
end
|
148
150
|
original_signal_handlers.clear
|
149
151
|
end
|
data/lib/trident/version.rb
CHANGED
@@ -37,20 +37,6 @@ class Trident::SignalHandlerTest < MiniTest::Should::TestCase
|
|
37
37
|
Marshal.load(result)
|
38
38
|
end
|
39
39
|
|
40
|
-
context "#initialize" do
|
41
|
-
|
42
|
-
should "add in CHLD handler" do
|
43
|
-
handler = SignalHandler.new({}, Target.new)
|
44
|
-
assert_equal({"SIGCHLD" => ["update"]}, handler.signal_mappings)
|
45
|
-
end
|
46
|
-
|
47
|
-
should "allow CHLD handler replacement" do
|
48
|
-
handler = SignalHandler.new({"CHLD" => "foo"}, Target.new)
|
49
|
-
assert_equal({"SIGCHLD" => ["foo"]}, handler.signal_mappings)
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
40
|
context "#signal_mappings==" do
|
55
41
|
|
56
42
|
should "normalize signal names" do
|
@@ -59,7 +45,7 @@ class Trident::SignalHandlerTest < MiniTest::Should::TestCase
|
|
59
45
|
{"int" => "foo", "sigterm" => "bar",
|
60
46
|
"USR1" => "baz", "SIGUSR2" => ["bum", "hum"]}
|
61
47
|
|
62
|
-
assert_equal({"
|
48
|
+
assert_equal({"SIGINT" => ["foo"],
|
63
49
|
"SIGTERM" => ["bar"], "SIGUSR1" => ["baz"],
|
64
50
|
"SIGUSR2" => ["bum", "hum"]}, handler.signal_mappings)
|
65
51
|
end
|
@@ -102,7 +88,6 @@ class Trident::SignalHandlerTest < MiniTest::Should::TestCase
|
|
102
88
|
|
103
89
|
handler.expects(:trap_deferred).with("SIGINT")
|
104
90
|
handler.expects(:trap_deferred).with("SIGTERM")
|
105
|
-
handler.expects(:trap_deferred).with("SIGCHLD")
|
106
91
|
handler.send(:setup_signal_handlers)
|
107
92
|
end
|
108
93
|
|
@@ -112,7 +97,7 @@ class Trident::SignalHandlerTest < MiniTest::Should::TestCase
|
|
112
97
|
|
113
98
|
handler.stubs(:trap_deferred)
|
114
99
|
handler.send(:setup_signal_handlers)
|
115
|
-
assert_equal({"
|
100
|
+
assert_equal({"SIGINT" => nil, "SIGTERM" => nil},
|
116
101
|
handler.original_signal_handlers)
|
117
102
|
end
|
118
103
|
|
@@ -137,11 +122,34 @@ class Trident::SignalHandlerTest < MiniTest::Should::TestCase
|
|
137
122
|
|
138
123
|
handler.expects(:trap).with("SIGINT", nil)
|
139
124
|
handler.expects(:trap).with("SIGTERM", nil)
|
140
|
-
handler.expects(:trap).with("SIGCHLD", nil)
|
141
125
|
handler.send(:reset_signal_handlers)
|
142
126
|
assert_empty handler.original_signal_handlers
|
143
127
|
end
|
144
128
|
|
129
|
+
should "reset SIGCHLD to default" do
|
130
|
+
signals = {"chld" => "update"}
|
131
|
+
handler = SignalHandler.new(signals, Target.new)
|
132
|
+
|
133
|
+
handler.stubs(:trap_deferred)
|
134
|
+
handler.send(:setup_signal_handlers)
|
135
|
+
|
136
|
+
handler.expects(:trap).with("SIGCHLD", "DEFAULT")
|
137
|
+
handler.send(:reset_signal_handlers)
|
138
|
+
assert_empty handler.original_signal_handlers
|
139
|
+
end
|
140
|
+
|
141
|
+
should "reset signals to original when set" do
|
142
|
+
signals = {"int" => "foo", "chld" => "bar"}
|
143
|
+
handler = SignalHandler.new(signals, Target.new)
|
144
|
+
|
145
|
+
handler.stubs(:trap_deferred).returns("IGNORE")
|
146
|
+
handler.send(:setup_signal_handlers)
|
147
|
+
|
148
|
+
handler.expects(:trap).with("SIGINT", "IGNORE")
|
149
|
+
handler.expects(:trap).with("SIGCHLD", "IGNORE")
|
150
|
+
handler.send(:reset_signal_handlers)
|
151
|
+
assert_empty handler.original_signal_handlers
|
152
|
+
end
|
145
153
|
end
|
146
154
|
|
147
155
|
context "#handle_signal_queue" do
|
@@ -252,6 +260,25 @@ class Trident::SignalHandlerTest < MiniTest::Should::TestCase
|
|
252
260
|
assert_equal [[:bar, [], nil], [:foo, [], nil], [:action_break, [], nil]], received
|
253
261
|
end
|
254
262
|
|
263
|
+
should "preserve SIGCHLD behavior" do
|
264
|
+
fc1 = ForkChild.new do
|
265
|
+
target = Target.new
|
266
|
+
SignalHandler.start({"chld" => "foo"}, target)
|
267
|
+
fc2 = ForkChild.new do
|
268
|
+
SignalHandler.reset_for_fork
|
269
|
+
pid = fork do
|
270
|
+
sleep 0.1
|
271
|
+
end
|
272
|
+
wait_thr = Process.detach(pid)
|
273
|
+
wait_thr.value.nil? # this will be nil if CHLD handler is not "DEFAULT"
|
274
|
+
end
|
275
|
+
fc2.wait
|
276
|
+
end
|
277
|
+
|
278
|
+
received = fc1.wait
|
279
|
+
assert_equal false, received
|
280
|
+
end
|
281
|
+
|
255
282
|
should "honor signal queue limit" do
|
256
283
|
fc = ForkChild.new do
|
257
284
|
$stderr.reopen("/dev/null")
|