aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2018-03-22 21:18:58 +0000
committerMatthew Wild <mwild1@gmail.com>2018-03-22 21:18:58 +0000
commite263a34414fcf15907d7dc5004e3caddf2b4bb3d (patch)
tree55bb91bb529edef529ba730a0d32154de1f3687c
parent58f5a8c2f04861b0ff7c98061769b1b46998b7ac (diff)
downloadprosody-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.
-rw-r--r--plugins/mod_posix.lua38
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