From 4916d973440829396327496b284b9997519f4f6a Mon Sep 17 00:00:00 2001
From: Chow Loong Jin <hyperair@debian.org>
Date: Tue, 22 Jul 2014 15:53:59 +0800
Subject: [PATCH] Fixed #23074: Release savepoints after doing a savepoint
 rollback in an atomic block

Signed-off-by: Chow Loong Jin <hyperair@debian.org>
---
 django/db/transaction.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/django/db/transaction.py b/django/db/transaction.py
index 786bc53..cd4f4ef 100644
--- a/django/db/transaction.py
+++ b/django/db/transaction.py
@@ -219,6 +219,8 @@ class Atomic(object):
                         except DatabaseError:
                             try:
                                 connection.savepoint_rollback(sid)
+                                # Call savepoint_commit to avoid leaking sid
+                                connection.savepoint_commit(sid)
                             except Error:
                                 # If rolling back to a savepoint fails, mark for
                                 # rollback at a higher level and avoid shadowing
@@ -249,6 +251,8 @@ class Atomic(object):
                     else:
                         try:
                             connection.savepoint_rollback(sid)
+                            # Call savepoint_commit to avoid leaking sid
+                            connection.savepoint_commit(sid)
                         except Error:
                             # If rolling back to a savepoint fails, mark for
                             # rollback at a higher level and avoid shadowing
-- 
1.9.1

