diff options
author | Matthew Wild <mwild1@gmail.com> | 2018-03-22 21:18:58 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2018-03-22 21:18:58 +0000 |
commit | e263a34414fcf15907d7dc5004e3caddf2b4bb3d (patch) | |
tree | 55bb91bb529edef529ba730a0d32154de1f3687c /plugins | |
parent | 58f5a8c2f04861b0ff7c98061769b1b46998b7ac (diff) | |
download | prosody-e263a34414fcf15907d7dc5004e3caddf2b4bb3d.tar.gz prosody-e263a34414fcf15907d7dc5004e3caddf2b4bb3d.zip |
mod_posix: Delay setting signal handlers until in the main thread
Signal handlers work by setting a debug hook. Hooks are per-thread, so we need this to be called in the main thread. However module loading is not in the main thread anymore.
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/mod_posix.lua | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/plugins/mod_posix.lua b/plugins/mod_posix.lua index 9b7d59f5..825d3be0 100644 --- a/plugins/mod_posix.lua +++ b/plugins/mod_posix.lua @@ -161,23 +161,25 @@ module:hook("server-stopped", remove_pidfile); -- Set signal handlers if have_signal then - signal.signal("SIGTERM", function () - module:log("warn", "Received SIGTERM"); - prosody.unlock_globals(); - prosody.shutdown("Received SIGTERM"); - prosody.lock_globals(); - end); - - signal.signal("SIGHUP", function () - module:log("info", "Received SIGHUP"); - prosody.reload_config(); - prosody.reopen_logfiles(); - end); - - signal.signal("SIGINT", function () - module:log("info", "Received SIGINT"); - prosody.unlock_globals(); - prosody.shutdown("Received SIGINT"); - prosody.lock_globals(); + module:add_timer(0, function () + signal.signal("SIGTERM", function () + module:log("warn", "Received SIGTERM"); + prosody.unlock_globals(); + prosody.shutdown("Received SIGTERM"); + prosody.lock_globals(); + end); + + signal.signal("SIGHUP", function () + module:log("info", "Received SIGHUP"); + prosody.reload_config(); + prosody.reopen_logfiles(); + end); + + signal.signal("SIGINT", function () + module:log("info", "Received SIGINT"); + prosody.unlock_globals(); + prosody.shutdown("Received SIGINT"); + prosody.lock_globals(); + end); end); end |