]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/plugins/deadlock_retry/lib/deadlock_retry.rb
Merge branch 'master' into openid
[rails.git] / vendor / plugins / deadlock_retry / lib / deadlock_retry.rb
index 413cb823c43ffd1e6c1c5deea73b1111447b15e1..f287c4e6743e254a04a781e45ad222548d9965ec 100644 (file)
@@ -33,7 +33,8 @@ module DeadlockRetry
   module ClassMethods
     DEADLOCK_ERROR_MESSAGES = [
       "Deadlock found when trying to get lock",
-      "Lock wait timeout exceeded"
+      "Lock wait timeout exceeded",
+      "deadlock detected"
     ]
 
     MAXIMUM_RETRIES_ON_DEADLOCK = 3
@@ -44,6 +45,7 @@ module DeadlockRetry
       begin
         transaction_without_deadlock_handling(*objects, &block)
       rescue ActiveRecord::StatementInvalid => error
+        raise unless connection.open_transactions.zero?
         if DEADLOCK_ERROR_MESSAGES.any? { |msg| error.message =~ /#{Regexp.escape(msg)}/ }
           raise if retry_count >= MAXIMUM_RETRIES_ON_DEADLOCK
           retry_count += 1