Skip to content

Commit ab7c89f

Browse files
committed
(maint) Enable simple tcp server to exit when sent sighup
Previously the Simple TCP server would not exit when a SIGHUP (Ctrl-C) signal was sent. This commit changes the stop_services handler so that it is aware when it is invoked from a TRAP as some operations are not allowed in the TRAP context. This commit also updates the trap handlers to use the correct method name.
1 parent fbc6b19 commit ab7c89f

File tree

3 files changed

+24
-14
lines changed

3 files changed

+24
-14
lines changed

server/lib/puppet-debugserver.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def self.rpc_server(options)
7878
options[:servicename] = 'DEBUG SERVER'
7979

8080
server.add_service(options[:ipaddress], options[:port])
81-
trap('INT') { server.stop }
81+
trap('INT') { server.stop_services(true) }
8282
server.start(PuppetDebugServer::MessageRouter, options, 2)
8383

8484
log_message(:info, 'Debug Server exited.')

server/lib/puppet-languageserver.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def self.rpc_server(options)
127127
options[:servicename] = 'LANGUAGE SERVER'
128128

129129
server.add_service(options[:ipaddress], options[:port])
130-
trap('INT') { server.stop }
130+
trap('INT') { server.stop_services(true) }
131131
server.start(PuppetLanguageServer::MessageRouter, options, 2)
132132

133133
log_message(:info, 'Language Server exited.')

server/lib/puppet-vscode/simple_tcp_server.rb

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def start(handler = PuppetVSCode::SimpleTCPServerConnection, connection_options
124124

125125
# Output to STDOUT. This is required by clients so it knows the server is now running
126126
self.class.s_locker.synchronize do
127-
self.class.services.each do |_service, options|
127+
self.class.services.each_value do |options|
128128
$stdout.write("#{@handler_start_options[:servicename]} RUNNING #{options[:hostname]}:#{options[:port]}\n")
129129
end
130130
end
@@ -279,20 +279,30 @@ def add_service(hostname = '127.0.0.1', port = 8081, parameters = {})
279279
end
280280

281281
# @api public
282-
def stop_services
282+
def stop_services(from_trap = false)
283283
log('Stopping services')
284-
self.class.s_locker.synchronize do
285-
self.class.services.each do |s, p|
286-
begin
287-
s.close
288-
rescue # rubocop:disable Lint/RescueWithoutErrorClass
289-
# Swallow all errors
290-
true
291-
end
292-
log("Stopped listening on #{p[:hostname]}:#{p[:port]}")
284+
if from_trap
285+
# synchronize is not allowed when called from a trap statement
286+
stop_all_services
287+
else
288+
self.class.s_locker.synchronize do
289+
stop_all_services
290+
end
291+
end
292+
end
293+
294+
# @api private
295+
def stop_all_services
296+
self.class.services.each do |s, p|
297+
begin
298+
s.close
299+
rescue # rubocop:disable Lint/RescueWithoutErrorClass
300+
# Swallow all errors
301+
true
293302
end
294-
self.class.services.clear
303+
log("Stopped listening on #{p[:hostname]}:#{p[:port]}")
295304
end
305+
self.class.services.clear
296306
end
297307

298308
# @api public

0 commit comments

Comments
 (0)