Changeset 4460 for trunk/activerecord/lib/active_record/transactions.rb
- Timestamp:
- 06/19/06 22:48:51 (4 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/activerecord/lib/active_record/transactions.rb
r4312 r4460 5 5 module ActiveRecord 6 6 module Transactions # :nodoc: 7 TRANSACTION_MUTEX = Mutex.new8 9 7 class TransactionError < ActiveRecordError # :nodoc: 10 8 end … … 80 78 def transaction(*objects, &block) 81 79 previous_handler = trap('TERM') { raise TransactionError, "Transaction aborted" } 82 lock_mutex83 80 increment_open_transactions 81 84 82 begin 85 83 objects.each { |o| o.extend(Transaction::Simple) } … … 94 92 raise 95 93 ensure 96 unlock_mutex94 decrement_open_transactions 97 95 trap('TERM', previous_handler) 98 96 end 99 97 end 100 101 def lock_mutex#:nodoc: 102 Thread.current['open_transactions'] ||= 0 103 TRANSACTION_MUTEX.lock if Thread.current['open_transactions'] == 0 104 Thread.current['start_db_transaction'] = (Thread.current['open_transactions'] == 0) 105 Thread.current['open_transactions'] += 1 106 end 107 108 def unlock_mutex#:nodoc: 109 Thread.current['open_transactions'] -= 1 110 TRANSACTION_MUTEX.unlock if Thread.current['open_transactions'] == 0 111 end 98 99 private 100 def increment_open_transactions #:nodoc: 101 open = Thread.current['open_transactions'] ||= 0 102 Thread.current['start_db_transaction'] = open.zero? 103 Thread.current['open_transactions'] = open + 1 104 end 105 106 def decrement_open_transactions #:nodoc: 107 Thread.current['open_transactions'] -= 1 108 end 112 109 end 113 110