Skip to content

Commit e097468

Browse files
committed
Fixed bug CORE-5528 : internal Firebird consistency check (limbo impossible (184), file: vio.cpp line: 2379)
Also, make all 3 in-limbo transaction handlers equal (at VIO_chase, VIO_get_current and prepare_update) to be more consistent
1 parent ecf9243 commit e097468

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

src/jrd/vio.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2294,6 +2294,11 @@ bool VIO_get_current(thread_db* tdbb,
22942294
VIO_data(tdbb, rpb, pool);
22952295
return true;
22962296

2297+
case tra_limbo:
2298+
if (!(transaction->tra_flags & TRA_ignore_limbo))
2299+
ERR_post(Arg::Gds(isc_rec_in_limbo) << Arg::Num(rpb->rpb_transaction_nr));
2300+
// fall thru
2301+
22972302
case tra_active:
22982303
// clear lock error from status vector
22992304
fb_utils::init_status(tdbb->tdbb_status_vector);
@@ -2338,10 +2343,6 @@ bool VIO_get_current(thread_db* tdbb,
23382343
}
23392344
break;
23402345

2341-
case tra_limbo:
2342-
BUGCHECK(184); // limbo impossible
2343-
break;
2344-
23452346
default:
23462347
fb_assert(false);
23472348
}
@@ -5362,11 +5363,14 @@ static int prepare_update( thread_db* tdbb,
53625363
Arg::Gds(isc_update_conflict) <<
53635364
Arg::Gds(isc_concurrent_transaction) << Arg::Num(update_conflict_trans));
53645365
}
5365-
case tra_active:
5366-
return PREPARE_LOCKERR;
53675366

53685367
case tra_limbo:
5369-
ERR_post(Arg::Gds(isc_deadlock) << Arg::Gds(isc_trainlim));
5368+
if (!(transaction->tra_flags & TRA_ignore_limbo))
5369+
ERR_post(Arg::Gds(isc_rec_in_limbo) << Arg::Num(rpb->rpb_transaction_nr));
5370+
// fall thru
5371+
5372+
case tra_active:
5373+
return PREPARE_LOCKERR;
53705374

53715375
case tra_dead:
53725376
break;

0 commit comments

Comments
 (0)