mirror of
https://github.com/github/rails.git
synced 2026-04-04 03:00:58 -04:00
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
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user