Avoid starting several time the owner process

This commit is contained in:
Mickael Remond 2016-07-26 12:12:48 +02:00
parent 9ff7257287
commit e5fd1ee4f6
No known key found for this signature in database
GPG Key ID: E6F6045D79965AA3
1 changed files with 14 additions and 1 deletions

View File

@ -50,7 +50,7 @@
-spec start() -> ok.
start() ->
Owner = spawn(fun() -> ets_keepalive() end),
{ok, Owner} = ets_owner(),
SplitPattern = binary:compile_pattern([<<"@">>, <<"/">>]),
%% Table is public to allow ETS insert to fix / update the table even if table already exist
%% with another owner.
@ -58,6 +58,19 @@ start() ->
ets:insert(jlib, {string_to_jid_pattern, SplitPattern}),
ok.
ets_owner() ->
case whereis(jlib_ets) of
undefined ->
Pid = spawn(fun() -> ets_keepalive() end),
case catch register(jlib_ets, Pid) of
true ->
{ok, Pid};
Error -> Error
end;
Pid ->
{ok,Pid}
end.
%% Process used to keep jlib ETS table alive in case the original owner dies.
%% The table need to be public, otherwise subsequent inserts would fail.
ets_keepalive() ->