mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-02-02 10:00:38 +01:00
Fixed CORE-3137: Partial rollback is possible for a selectable procedure modifying data.
This commit is contained in:
parent
1c1b3abfa5
commit
34dd100554
@ -2149,18 +2149,21 @@ void VIO_merge_proc_sav_points(thread_db* tdbb, jrd_tra* transaction, Savepoint*
|
||||
return;
|
||||
}
|
||||
|
||||
// one by one go on putting all savepoints in the sav_point_list on
|
||||
// top of transaction save points and call VIO_verb_cleanup()
|
||||
// Merge all savepoints in the sav_point_list at the top
|
||||
// of transaction save points and call VIO_verb_cleanup()
|
||||
|
||||
Savepoint* const org_save_point = transaction->tra_save_point;
|
||||
transaction->tra_save_point = *sav_point_list;
|
||||
|
||||
for (Savepoint* sav_point = *sav_point_list; sav_point; sav_point = sav_point->sav_next)
|
||||
{
|
||||
Savepoint* const sav_next = sav_point->sav_next;
|
||||
const SLONG sav_number = sav_point->sav_number;
|
||||
|
||||
// add it to the front
|
||||
|
||||
sav_point->sav_next = transaction->tra_save_point;
|
||||
transaction->tra_save_point = sav_point;
|
||||
if (!sav_point->sav_next)
|
||||
{
|
||||
sav_point->sav_next = org_save_point;
|
||||
}
|
||||
|
||||
VIO_verb_cleanup(tdbb, transaction);
|
||||
|
||||
@ -2175,6 +2178,8 @@ void VIO_merge_proc_sav_points(thread_db* tdbb, jrd_tra* transaction, Savepoint*
|
||||
*sav_point_list = sav_point;
|
||||
sav_point_list = &sav_point->sav_next;
|
||||
}
|
||||
|
||||
fb_assert(org_save_point == transaction->tra_save_point);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user