aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaweł Chmielowski <pawel@process-one.net>2022-04-28 09:51:40 +0200
committerPaweł Chmielowski <pawel@process-one.net>2022-04-28 09:51:51 +0200
commit6fd4315a0c78dddabd509bfb221f2be459dcfe76 (patch)
tree72b55055660409ca00fb29fc1d1909b3ac6377b4 /src
parentDon't send ping if resource is gone (diff)
Guard agains erlang:system_info(logical_processors) not always returning number
Diffstat (limited to 'src')
-rw-r--r--src/extauth.erl5
-rw-r--r--src/misc.erl14
-rw-r--r--src/mod_muc.erl4
-rw-r--r--src/mod_muc_sup.erl2
4 files changed, 15 insertions, 10 deletions
diff --git a/src/extauth.erl b/src/extauth.erl
index 16a5e3f7c..64c1b9ebb 100644
--- a/src/extauth.erl
+++ b/src/extauth.erl
@@ -99,10 +99,7 @@ worker_name(Pool, N) ->
-spec pool_size(binary()) -> pos_integer().
pool_size(Host) ->
case ejabberd_option:extauth_pool_size(Host) of
- undefined ->
- try erlang:system_info(logical_processors)
- catch _:_ -> 1
- end;
+ undefined -> misc:logical_processors();
Size ->
Size
end.
diff --git a/src/misc.erl b/src/misc.erl
index 1cfcc2182..072b74681 100644
--- a/src/misc.erl
+++ b/src/misc.erl
@@ -42,7 +42,8 @@
is_mucsub_message/1, best_match/2, pmap/2, peach/2, format_exception/4,
get_my_ipv4_address/0, get_my_ipv6_address/0, parse_ip_mask/1,
crypto_hmac/3, crypto_hmac/4, uri_parse/1,
- match_ip_mask/3, format_hosts_list/1, format_cycle/1, delete_dir/1]).
+ match_ip_mask/3, format_hosts_list/1, format_cycle/1, delete_dir/1,
+ logical_processors/0]).
%% Deprecated functions
-export([decode_base64/1, encode_base64/1]).
@@ -451,9 +452,16 @@ best_match(Pattern, Opts) ->
end, #{}, Opts),
element(2, lists:min(Ds)).
+-spec logical_processors() -> non_neg_integer().
+logical_processors() ->
+ case erlang:system_info(logical_processors) of
+ unknown -> 1;
+ V -> V
+ end.
+
-spec pmap(fun((T1) -> T2), [T1]) -> [T2].
pmap(Fun, [_,_|_] = List) ->
- case erlang:system_info(logical_processors) of
+ case logical_processors() of
1 -> lists:map(Fun, List);
_ ->
Self = self(),
@@ -477,7 +485,7 @@ pmap(Fun, List) ->
-spec peach(fun((T) -> any()), [T]) -> ok.
peach(Fun, [_,_|_] = List) ->
- case erlang:system_info(logical_processors) of
+ case logical_processors() of
1 -> lists:foreach(Fun, List);
_ ->
Self = self(),
diff --git a/src/mod_muc.erl b/src/mod_muc.erl
index ec55e3c14..a6e0c6030 100644
--- a/src/mod_muc.erl
+++ b/src/mod_muc.erl
@@ -166,7 +166,7 @@ reload(ServerHost, NewOpts, OldOpts) ->
fun(I) ->
?GEN_SERVER:cast(procname(ServerHost, I),
{reload, AddHosts, DelHosts, NewHosts})
- end, lists:seq(1, erlang:system_info(logical_processors))),
+ end, lists:seq(1, misc:logical_processors())),
load_permanent_rooms(AddHosts, ServerHost, NewOpts),
shutdown_rooms(ServerHost, DelHosts, OldRMod),
lists:foreach(
@@ -193,7 +193,7 @@ procname(Host, I) when is_integer(I) ->
<<(atom_to_binary(?MODULE, latin1))/binary, "_", Host/binary,
"_", (integer_to_binary(I))/binary>>, utf8);
procname(Host, RoomHost) ->
- Cores = erlang:system_info(logical_processors),
+ Cores = misc:logical_processors(),
I = erlang:phash2(RoomHost, Cores) + 1,
procname(Host, I).
diff --git a/src/mod_muc_sup.erl b/src/mod_muc_sup.erl
index 11a147bb5..2c2d62313 100644
--- a/src/mod_muc_sup.erl
+++ b/src/mod_muc_sup.erl
@@ -51,7 +51,7 @@ procname(Host) ->
%%% Supervisor callbacks
%%%===================================================================
init([Host]) ->
- Cores = erlang:system_info(logical_processors),
+ Cores = misc:logical_processors(),
Specs = lists:foldl(
fun(I, Acc) ->
[#{id => mod_muc:procname(Host, I),