2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2025-09-06 10:50:21 +08:00

FIX: Race-condition in fallback handlers (#8005)

Calling `verify_master` in multiple threads simultaneously would cause
multiple threads to be spawned.
This commit is contained in:
Daniel Waterworth 2019-08-21 14:47:44 +01:00 committed by Régis Hanol
parent 00b75b4f4e
commit 6924f1ab15
2 changed files with 24 additions and 20 deletions

View file

@ -23,17 +23,19 @@ class DiscourseRedis
end
def verify_master
synchronize { return if @thread && @thread.alive? }
synchronize do
return if @thread && @thread.alive?
@thread = Thread.new do
loop do
begin
thread = Thread.new { initiate_fallback_to_master }
thread.join
break if synchronize { @master }
sleep 5
ensure
thread.kill
@thread = Thread.new do
loop do
begin
thread = Thread.new { initiate_fallback_to_master }
thread.join
break if synchronize { @master }
sleep 5
ensure
thread.kill
end
end
end
end