aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2020-06-15 14:16:34 +0100
committerMatthew Wild <mwild1@gmail.com>2020-06-15 14:16:34 +0100
commit0e146820c08a7b61535f43ba00e101ed9f4ba70a (patch)
treea62f9a64e0a77c61b7481f9a4b8d531a7af0e8d2 /util
parent9d1dd4c4ee7e2a70b2a73e7b5a13298e662df585 (diff)
downloadprosody-0e146820c08a7b61535f43ba00e101ed9f4ba70a.tar.gz
prosody-0e146820c08a7b61535f43ba00e101ed9f4ba70a.zip
util.startup: Configure the GC on startup, using the config or built-in defaults
Diffstat (limited to 'util')
-rw-r--r--util/startup.lua17
1 files changed, 17 insertions, 0 deletions
diff --git a/util/startup.lua b/util/startup.lua
index 2a7e8a36..c1f4ec8b 100644
--- a/util/startup.lua
+++ b/util/startup.lua
@@ -12,6 +12,8 @@ local dependencies = require "util.dependencies";
local original_logging_config;
+local default_gc_params = { mode = "incremental", threshold = 105, speed = 250 };
+
local short_params = { D = "daemonize", F = "no-daemonize" };
local value_params = { config = true };
@@ -544,6 +546,19 @@ function startup.check_unwriteable()
end
end
+function startup.init_gc()
+ -- Apply garbage collector settings from the config file
+ local gc = require "util.gc";
+ local gc_settings = config.get("*", "gc") or { mode = default_gc_params.mode };
+
+ local ok, err = gc.configure(gc_settings, default_gc_params);
+ if not ok then
+ log("error", "Failed to apply GC configuration: %s", err);
+ return nil, err;
+ end
+ return true;
+end
+
function startup.make_host(hostname)
return {
type = "local",
@@ -573,6 +588,7 @@ function startup.prosodyctl()
startup.read_config();
startup.force_console_logging();
startup.init_logging();
+ startup.init_gc();
startup.setup_plugindir();
startup.setup_datadir();
startup.chdir();
@@ -593,6 +609,7 @@ function startup.prosody()
startup.init_global_state();
startup.read_config();
startup.init_logging();
+ startup.init_gc();
startup.sanity_check();
startup.sandbox_require();
startup.set_function_metatable();