]> granicus.if.org Git - ejabberd/commitdiff
Avoid starting several time the owner process
authorMickael Remond <mremond@process-one.net>
Tue, 26 Jul 2016 10:12:48 +0000 (12:12 +0200)
committerMickael Remond <mremond@process-one.net>
Tue, 26 Jul 2016 10:12:48 +0000 (12:12 +0200)
src/jid.erl

index 46830d0314f0de39703c2afc392575866d33df64..a730bd949612beca9d951e6dfabb0c7605fbd8b4 100644 (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() ->