util/gc.lua
author Matthew Wild <mwild1@gmail.com>
Mon, 31 Oct 2022 14:32:02 +0000
branch0.12
changeset 12794 24b55f0e2db9
parent 11435 4874b54af344
child 12979 d10957394a3c
permissions -rw-r--r--
mod_http: Allow disabling CORS in the http_cors_override option and by default Fixes #1779. Due to an oversight in the logic, if the user set 'enabled' to false in an override, it would disable the item's requested CORS settings, but still apply Prosody's default CORS policy. This change ensures that 'enabled = false' will now disable CORS entirely for the requested item. Due to the new structure of the code, it was necessary to have a flag to say whether CORS is to be applied at all. Rather than hard-coding 'true' here, I chose to add a new option: 'http_default_cors_enabled'. This is a boolean that allows the operator to disable Prosody's default CORS policy entirely (the one that is used when a module or config does not override it). This makes it easier to disable CORS and then selectively enable it only on services you want it on.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10937
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
local set = require "util.set";
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     2
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
local known_options = {
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     4
	incremental = set.new { "mode", "threshold", "speed", "step_size" };
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     5
	generational = set.new { "mode", "minor_threshold", "major_threshold" };
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
};
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
11435
4874b54af344 util.gc: Fix check for Lua 5.4
Kim Alvefur <zash@zash.se>
parents: 10939
diff changeset
     8
if _VERSION ~= "Lua 5.4" then
10937
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
	known_options.generational = nil;
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
	known_options.incremental:remove("step_size");
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
end
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    13
local function configure(user, defaults)
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    14
	local mode = user.mode or defaults.mode or "incremental";
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    15
	if not known_options[mode] then
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
		return nil, "GC mode not supported on ".._VERSION..": "..mode;
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    17
	end
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    18
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    19
	for k, v in pairs(user) do
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
		if not known_options[mode]:contains(k) then
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    21
			return nil, "Unknown GC parameter: "..k;
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    22
		elseif k ~= "mode" and type(v) ~= "number" then
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    23
			return nil, "parameter '"..k.."' should be a number";
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    24
		end
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    25
	end
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    26
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    27
	if mode == "incremental" then
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    28
		if _VERSION == "Lua 5.4" then
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
			collectgarbage(mode,
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    30
				user.threshold or defaults.threshold,
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    31
				user.speed or defaults.speed,
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    32
				user.step_size or defaults.step_size
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
			);
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
		else
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
			collectgarbage("setpause", user.threshold or defaults.threshold);
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    36
			collectgarbage("setstepmul", user.speed or defaults.speed);
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    37
		end
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    38
	elseif mode == "generational" then
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    39
		collectgarbage(mode,
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
			user.minor_threshold or defaults.minor_threshold,
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    41
			user.major_threshold or defaults.major_threshold
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
		);
10939
2d57c49bfa12 util.gc: Linter fixes [luacheck]
Matthew Wild <mwild1@gmail.com>
parents: 10937
diff changeset
    43
	end
10937
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    44
	return true;
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    45
end
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    46
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    47
return {
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    48
	configure = configure;
f59bc81245b3 util.gc: New module for configuring the Lua garbage collector
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    49
};