From 3c588e49265cec3067ff7835ed883c660eb3c603 Mon Sep 17 00:00:00 2001 From: Bell Isabell Date: Tue, 3 Mar 2026 18:53:00 -0800 Subject: [PATCH] Fix race condition in Subscription#verify! Wrap verify! in with_lock to prevent concurrent execution that could send duplicate new subscriber notifications. The race condition occurred when two concurrent requests both checked verified_at.present? before either had saved, causing both to send notifications. Closes #29 --- app/models/subscription.rb | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/models/subscription.rb b/app/models/subscription.rb index 220ae28..b9a79e7 100644 --- a/app/models/subscription.rb +++ b/app/models/subscription.rb @@ -44,12 +44,14 @@ def self.new_token end def verify! - already_verified = verified_at.present? - self.verified_at = Time.zone.now - self.unsubscribed_at = nil - save! - - send_new_subscriber_notification unless already_verified + with_lock do + already_verified = verified_at.present? + self.verified_at = Time.zone.now + self.unsubscribed_at = nil + save! + + send_new_subscriber_notification unless already_verified + end end # Sends verification email.