mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-22 22:43:03 +01:00
Fix possible engine lock-up/crash when 'RELEASE SAVEPOINT xxx ONLY' syntax is used or when existing savepoint name is reused in transaction context (when old savepoint with the save name is implicitly released)
This commit is contained in:
parent
2d10ba73f2
commit
76a0760436
@ -2131,10 +2131,10 @@ static jrd_nod* looper(thread_db* tdbb, jrd_req* request, jrd_nod* in_node)
|
||||
case blr_savepoint_set:
|
||||
// Release the savepoint
|
||||
if (found) {
|
||||
previous->sav_next = savepoint->sav_next;
|
||||
Savepoint* const current = transaction->tra_save_point;
|
||||
transaction->tra_save_point = savepoint;
|
||||
verb_cleanup(tdbb, transaction);
|
||||
previous->sav_next = transaction->tra_save_point;
|
||||
transaction->tra_save_point = current;
|
||||
}
|
||||
|
||||
@ -2145,10 +2145,10 @@ static jrd_nod* looper(thread_db* tdbb, jrd_req* request, jrd_nod* in_node)
|
||||
case blr_savepoint_release_single:
|
||||
{
|
||||
// Release the savepoint
|
||||
previous->sav_next = savepoint->sav_next;
|
||||
Savepoint* const current = transaction->tra_save_point;
|
||||
transaction->tra_save_point = savepoint;
|
||||
verb_cleanup(tdbb, transaction);
|
||||
previous->sav_next = transaction->tra_save_point;
|
||||
transaction->tra_save_point = current;
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user