mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Fixed #21239 -- Maintained atomicity when closing the connection.
Refs #15802 -- Reverted #7c657b24 as BaseDatabaseWrapper.close() now has a proper "finally" clause that may need to preserve self.connection.
This commit is contained in:
@@ -205,7 +205,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:
|
||||
@@ -245,13 +250,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))
|
||||
|
||||
Reference in New Issue
Block a user