diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2022-05-26 18:58:19 +0200 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2022-05-26 18:59:55 +0200 |
commit | 104fdaf4464101ff1f7e3112f6874e9d12b755f6 (patch) | |
tree | 86cb695a53330466413e4ea5e1881ab44416bacf | |
parent | a3909514bf2574dd44b969dfcb69d51a438cd7ac (diff) |
Fix concurrent unfollowing decrementing follower count more than once
-rw-r--r-- | app/services/unfollow_service.rb | 8 |
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 |