summaryrefslogtreecommitdiff
path: root/includes/database/database.inc
diff options
context:
space:
mode:
authorwebchick <webchick@24967.no-reply.drupal.org>2011-12-31 16:09:02 -0800
committerwebchick <webchick@24967.no-reply.drupal.org>2011-12-31 16:09:02 -0800
commitd74306729631ead14323638108e3dcdf5f926517 (patch)
treec0b63517798f274f4c9404b245b0175f3cb08b65 /includes/database/database.inc
parent8703bb7b3d83f79c3a1453f17a8f4eb9da9f442f (diff)
downloadbrdo-d74306729631ead14323638108e3dcdf5f926517.tar.gz
brdo-d74306729631ead14323638108e3dcdf5f926517.tar.bz2
Issue follow-up #1007830 by Damien Tournoud, basic: Fixed Nested transactions throw exceptions when they got out of scope.
Diffstat (limited to 'includes/database/database.inc')
-rw-r--r--includes/database/database.inc12
1 files changed, 8 insertions, 4 deletions
diff --git a/includes/database/database.inc b/includes/database/database.inc
index 33000aa70..6e40b2765 100644
--- a/includes/database/database.inc
+++ b/includes/database/database.inc
@@ -1016,9 +1016,9 @@ abstract class DatabaseConnection extends PDO {
throw new DatabaseTransactionNoActiveException();
}
// A previous rollback to an earlier savepoint may mean that the savepoint
- // in question has already been rolled back.
- if (!in_array($savepoint_name, $this->transactionLayers)) {
- return;
+ // in question has already been accidentally committed.
+ if (!isset($this->transactionLayers[$savepoint_name])) {
+ throw new DatabaseTransactionNoActiveException();
}
// We need to find the point we're rolling back to, all other savepoints
@@ -1096,8 +1096,12 @@ abstract class DatabaseConnection extends PDO {
if (!$this->supportsTransactions()) {
return;
}
+ // The transaction has already been committed earlier. There is nothing we
+ // need to do. If this transaction was part of an earlier out-of-order
+ // rollback, an exception would already have been thrown by
+ // Database::rollback().
if (!isset($this->transactionLayers[$name])) {
- throw new DatabaseTransactionNoActiveException();
+ return;
}
// Mark this layer as committable.