Savepoints are not released on commit
-------------------------------------
Key: CORE-4382
URL: http://tracker.firebirdsql.org/browse/CORE-4382
Project: Firebird Core
Issue Type: Bug
Components: Engine
Affects Versions: 3.0 Alpha 2, 2.5.1
Reporter: Dimitry Sibiryakov
Attachments: tra.diff
Following script leaves in index several orphan nodes.
create database "g_test";
create table g_test (f integer);
create index g_ind on g_test (f);
insert into g_test values (1);
commit;
update g_test set f=2;
savepoint a;
update g_test set f=3;
savepoint b;
update g_test set f=4;
savepoint c;
update g_test set f=5;
savepoint d;
update g_test set f=6;
savepoint e;
update g_test set f=7;
commit;
select * from g_test;
Proposed patch:
Index: tra.cpp
===================================================================
--- tra.cpp (revision 59342)
+++ tra.cpp (working copy)
@@ -381,7 +381,15 @@
// Flush pages if transaction logically modified data
if (transaction->tra_flags & TRA_write)
+ {
+ // Get rid of all savepoints except transaction one
+ // to let all intermediate garbage after update_in_place in
indices and BLOBs to be cleaned up
+ while (transaction->tra_save_point &&
!(transaction->tra_save_point->sav_flags & SAV_trans_level))
+ {
+ VIO_verb_cleanup(tdbb, transaction);
+ }
transaction_flush(tdbb, FLUSH_TRAN, transaction->tra_number);
+ }
else if ((transaction->tra_flags & (TRA_prepare2 | TRA_reconnected)) ||
(sysTran->tra_flags & TRA_write))
{
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
------------------------------------------------------------------------------
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel