aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/transactions.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/lib/active_record/transactions.rb')
-rw-r--r--activerecord/lib/active_record/transactions.rb7
1 files changed, 7 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb
index d6b99008ee..de2937a96d 100644
--- a/activerecord/lib/active_record/transactions.rb
+++ b/activerecord/lib/active_record/transactions.rb
@@ -6,6 +6,9 @@ module ActiveRecord
module Transactions # :nodoc:
TRANSACTION_MUTEX = Mutex.new
+ class TransactionError < ActiveRecordError # :nodoc:
+ end
+
def self.append_features(base)
super
base.extend(ClassMethods)
@@ -78,6 +81,9 @@ module ActiveRecord
# Tribute: Object-level transactions are implemented by Transaction::Simple by Austin Ziegler.
module ClassMethods
def transaction(*objects, &block)
+ previous_handler = trap('TERM') do
+ raise TransactionError, "Transaction aborted"
+ end
lock_mutex
begin
@@ -93,6 +99,7 @@ module ActiveRecord
raise
ensure
unlock_mutex
+ trap('TERM', previous_handler)
end
end