diff options
Diffstat (limited to 'django/db/transaction.py')
| -rw-r--r-- | django/db/transaction.py | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/django/db/transaction.py b/django/db/transaction.py index 78f8423150..ae009a40b4 100644 --- a/django/db/transaction.py +++ b/django/db/transaction.py @@ -290,7 +290,12 @@ class Atomic(object): connection.in_atomic_block = False try: - if exc_type is None and not connection.needs_rollback: + if connection.closed_in_transaction: + # The database will perform a rollback by itself. + # Wait until we exit the outermost block. + pass + + elif exc_type is None and not connection.needs_rollback: if connection.in_atomic_block: # Release savepoint if there is one if sid is not None: @@ -330,13 +335,18 @@ class Atomic(object): finally: # Outermost block exit when autocommit was enabled. if not connection.in_atomic_block: - if connection.features.autocommits_when_autocommit_is_off: + if connection.closed_in_transaction: + connection.connection = None + elif connection.features.autocommits_when_autocommit_is_off: connection.autocommit = True else: connection.set_autocommit(True) # Outermost block exit when autocommit was disabled. elif not connection.savepoint_ids and not connection.commit_on_exit: - connection.in_atomic_block = False + if connection.closed_in_transaction: + connection.connection = None + else: + connection.in_atomic_block = False def __call__(self, func): @wraps(func, assigned=available_attrs(func)) |
