8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-23 18:43:03 +01:00

Rolled back previous bugfix due to found side-effects. Still looking for a correct solution.

This commit is contained in:
dimitr 2003-05-26 08:18:33 +00:00
parent 2f891896f9
commit 7d9f0821c3

View File

@ -2810,9 +2810,7 @@ void VIO_verb_cleanup(TDBB tdbb, JRD_TRA transaction)
VIO_backout(tdbb, &rpb, transaction); VIO_backout(tdbb, &rpb, transaction);
else { else {
record = action->vct_undo->current().rec_data; record = action->vct_undo->current().rec_data;
same_tx = same_tx = (record->rec_flags & REC_same_tx) ? TRUE : FALSE;
(record->rec_flags & REC_same_tx) ? TRUE :
FALSE;
/* Have we done BOTH an update and delete to this record /* Have we done BOTH an update and delete to this record
in the same transaction? */ in the same transaction? */
@ -2850,11 +2848,9 @@ void VIO_verb_cleanup(TDBB tdbb, JRD_TRA transaction)
reinterpret_cast < reinterpret_cast <
blk * >(tdbb->tdbb_default)); blk * >(tdbb->tdbb_default));
} }
update_in_place(tdbb, transaction, &rpb, update_in_place(tdbb, transaction, &rpb, &new_rpb);
&new_rpb);
if (!(transaction->tra_flags & TRA_system)) if (!(transaction->tra_flags & TRA_system))
garbage_collect_idx(tdbb, &rpb, &new_rpb, garbage_collect_idx(tdbb, &rpb, &new_rpb, NULL);
NULL);
rpb.rpb_record = dead_record; rpb.rpb_record = dead_record;
} }
} }
@ -3325,10 +3321,6 @@ static void garbage_collect(
delete_(tdbb, rpb, prior_page, tdbb->tdbb_default); delete_(tdbb, rpb, prior_page, tdbb->tdbb_default);
if (rpb->rpb_record) { if (rpb->rpb_record) {
LLS_PUSH(rpb->rpb_record, &going); LLS_PUSH(rpb->rpb_record, &going);
BLB_garbage_collect(tdbb, going, staying, prior_page, rpb->rpb_relation);
IDX_garbage_collect(tdbb, rpb, going, staying);
delete LLS_POP(&going);
going = NULL;
} }
#ifdef SUPERSERVER #ifdef SUPERSERVER
/* Don't monopolize the server while chasing long /* Don't monopolize the server while chasing long
@ -3338,6 +3330,12 @@ static void garbage_collect(
(void) JRD_reschedule(tdbb, 0, TRUE); (void) JRD_reschedule(tdbb, 0, TRUE);
#endif #endif
} }
BLB_garbage_collect(tdbb, going, staying, prior_page, rpb->rpb_relation);
IDX_garbage_collect(tdbb, rpb, going, staying);
while (going)
delete LLS_POP(&going);
} }