From a677da209b16f43198b3485dda89dce862fb9bfb Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sun, 10 Apr 2005 17:34:29 +0000 Subject: Added rollbacks of transactions if they're active as the dispatcher is killed gracefully (TERM signal) #1054 [Leon Bredt] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1136 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activerecord/CHANGELOG | 2 ++ activerecord/lib/active_record/transactions.rb | 7 +++++++ 2 files changed, 9 insertions(+) (limited to 'activerecord') diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 12f577e91d..1d2d2b2bb1 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Added rollbacks of transactions if they're active as the dispatcher is killed gracefully (TERM signal) #1054 [Leon Bredt] + * Added quoting of column names for fixtures #997 [jcfischer@gmail.com] * Fixed counter_sql when no records exist in database for PostgreSQL (would give error, not 0) #1039 [Caleb Tennis] 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 -- cgit v1.2.3