From f7076f49b6bf006ffb1abe9cbd7595a4a6b0aa46 Mon Sep 17 00:00:00 2001 From: Badlop Date: Sat, 26 Nov 2011 17:03:24 +0100 Subject: [PATCH] Avoid a possible race condition --- src/mod_ip_blacklist.erl | 23 +++++++++++++++-------- 1 file 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: