aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEvgeny Khramtsov <ekhramtsov@process-one.net>2019-10-29 13:36:40 +0300
committerEvgeny Khramtsov <ekhramtsov@process-one.net>2019-10-29 13:36:40 +0300
commit72f6835feb8566c6a996c904824654f3f8eee436 (patch)
treed72369a68bd2f28448770121dcf75d4a8d4b6b79 /src
parentAvoid using 64-bit unsigned integers (diff)
Fix race condition in Redis/SQL supervisors startup
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_redis_sup.erl5
-rw-r--r--src/ejabberd_sql_sup.erl5
2 files changed, 8 insertions, 2 deletions
diff --git a/src/ejabberd_redis_sup.erl b/src/ejabberd_redis_sup.erl
index 8605d24e5..7bba0882a 100644
--- a/src/ejabberd_redis_sup.erl
+++ b/src/ejabberd_redis_sup.erl
@@ -45,7 +45,10 @@ start() ->
permanent, infinity, supervisor, [?MODULE]},
case supervisor:start_child(ejabberd_db_sup, Spec) of
{ok, _} -> ok;
- {error, {already_started, _}} -> ok;
+ {error, {already_started, Pid}} ->
+ %% Wait for the supervisor to fully start
+ _ = supervisor:count_children(Pid),
+ ok;
{error, Why} = Err ->
?ERROR_MSG("Failed to start ~ts: ~p", [?MODULE, Why]),
Err
diff --git a/src/ejabberd_sql_sup.erl b/src/ejabberd_sql_sup.erl
index 731612e53..074080f5f 100644
--- a/src/ejabberd_sql_sup.erl
+++ b/src/ejabberd_sql_sup.erl
@@ -52,7 +52,10 @@ start(Host) ->
modules => [?MODULE]},
case supervisor:start_child(ejabberd_db_sup, Spec) of
{ok, _} -> ok;
- {error, {already_started, _}} -> ok;
+ {error, {already_started, Pid}} ->
+ %% Wait for the supervisor to fully start
+ _ = supervisor:count_children(Pid),
+ ok;
{error, Why} = Err ->
?ERROR_MSG("Failed to start ~ts: ~p", [?MODULE, Why]),
Err