mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-28 17:38:54 +01:00
Make jlib ETS table more resilient
This commit is contained in:
parent
12f74b4aa7
commit
9ff7257287
13
src/jid.erl
13
src/jid.erl
@ -50,11 +50,22 @@
|
|||||||
-spec start() -> ok.
|
-spec start() -> ok.
|
||||||
|
|
||||||
start() ->
|
start() ->
|
||||||
|
Owner = spawn(fun() -> ets_keepalive() end),
|
||||||
SplitPattern = binary:compile_pattern([<<"@">>, <<"/">>]),
|
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}),
|
ets:insert(jlib, {string_to_jid_pattern, SplitPattern}),
|
||||||
ok.
|
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.
|
-spec make(binary(), binary(), binary()) -> jid() | error.
|
||||||
|
|
||||||
make(User, Server, Resource) ->
|
make(User, Server, Resource) ->
|
||||||
|
Loading…
Reference in New Issue
Block a user