Make jlib ETS table more resilient

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

View File

@ -50,11 +50,22 @@
-spec start() -> ok.
start() ->
Owner = spawn(fun() -> ets_keepalive() end),
SplitPattern = binary:compile_pattern([<<"@">>, <<"/">>]),
catch ets:new(jlib, [named_table, protected, set, {keypos, 1}]),
%% Table is public to allow ETS insert to fix / update the table even if table already exist
%% with another owner.
catch ets:new(jlib, [named_table, public, set, {keypos, 1}, {heir, Owner, undefined}]),
ets:insert(jlib, {string_to_jid_pattern, SplitPattern}),
ok.
%% 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() ->
receive
_ ->
ets_keepalive()
end.
-spec make(binary(), binary(), binary()) -> jid() | error.
make(User, Server, Resource) ->