summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2022-05-26 18:58:19 +0200
committerEugen Rochko <eugen@zeonfederated.com>2022-05-26 18:59:55 +0200
commit104fdaf4464101ff1f7e3112f6874e9d12b755f6 (patch)
tree86cb695a53330466413e4ea5e1881ab44416bacf
parenta3909514bf2574dd44b969dfcb69d51a438cd7ac (diff)
Fix concurrent unfollowing decrementing follower count more than once
-rw-r--r--app/services/unfollow_service.rb8
1 files changed, 7 insertions, 1 deletions
diff --git a/app/services/unfollow_service.rb b/app/services/unfollow_service.rb
index 151f3674fd6..0f04713d1de 100644
--- a/app/services/unfollow_service.rb
+++ b/app/services/unfollow_service.rb
@@ -13,7 +13,13 @@ class UnfollowService < BaseService
@target_account = target_account
@options = options
- unfollow! || undo_follow_request!
+ RedisLock.acquire(redis: Redis.current, key: "relationship:#{[source_account.id, target_account.id].sort.join(':')}", autorelease: 90.seconds) do |lock|
+ if lock.acquired?
+ unfollow! || undo_follow_request!
+ else
+ raise Mastodon::RaceConditionError
+ end
+ end
end
private