diff options
author | Badlop <badlop@process-one.net> | 2011-11-26 17:03:24 +0100 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2011-11-26 17:03:24 +0100 |
commit | 1f97740cfa9ba1609a84098368b852fc63efdba7 (patch) | |
tree | f6ed4c5cc40f387ec84d09d227d6e4db48843930 /src | |
parent | Comment section 6.3.1 because it has no content at all (diff) |
Avoid a possible race condition
Diffstat (limited to '')
-rw-r--r-- | src/mod_ip_blacklist.erl | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/mod_ip_blacklist.erl b/src/mod_ip_blacklist.erl index eac61a766..718a25b1e 100644 --- a/src/mod_ip_blacklist.erl +++ b/src/mod_ip_blacklist.erl @@ -33,6 +33,7 @@ %% API: -export([start/2, + preinit/2, init/1, stop/1]). -export([update_bl_c2s/0]). @@ -49,14 +50,20 @@ -record(bl_c2s, {ip}). %% Start once for all vhost -start(Host, Opts) -> - case whereis(?PROCNAME) of - undefined -> - ?DEBUG("Starting mod_ip_blacklist ~p ~p~n", [Host, Opts]), - register(?PROCNAME, - spawn(?MODULE, init, [#state{}])); - _ -> - ok +start(_Host, _Opts) -> + Pid = spawn(?MODULE, preinit, [self(), #state{}]), + receive {ok, Pid, PreinitResult} -> + PreinitResult + end. + +preinit(Parent, State) -> + Pid = self(), + try register(?PROCNAME, Pid) of + true -> + Parent ! {ok, Pid, true}, + init(State) + catch error:_ -> + Parent ! {ok, Pid, true} end. %% TODO: |