@@ -75,11 +75,11 @@ enum lck_t {
75
75
LCK_btr_dont_gc, // Prevent removal of b-tree page from index
76
76
LCK_shared_counter, // Database-wide shared counter
77
77
LCK_tra_pc, // Precommitted transaction lock
78
+ LCK_rel_gc, // Allow garbage collection for relation
78
79
LCK_fun_exist, // Function existence lock
79
80
LCK_rel_rescan, // Relation forced rescan lock
80
81
LCK_crypt, // Crypt lock for single crypt thread
81
82
LCK_crypt_status, // Notifies about changed database encryption status
82
- LCK_idx_reserve, // Index reservation lock
83
83
LCK_record_gc // Record-level GC lock
84
84
};
85
85
@@ -1232,30 +1232,85 @@ static void prt_lock(OUTFILE outfile, const lhb* LOCK_header, const lbl* lock, U
1232
1232
" \t Series: %d, State: %d, Size: %d, Length: %d, Data: %" SQUADFORMAT" \n " ,
1233
1233
lock->lbl_series , lock->lbl_state , lock->lbl_size , lock->lbl_length , lock->lbl_data );
1234
1234
1235
- if ((lock->lbl_series == Jrd::LCK_bdb || lock->lbl_series == Jrd::LCK_btr_dont_gc) &&
1235
+ if ((lock->lbl_series == Jrd::LCK_bdb ||
1236
+ lock->lbl_series == Jrd::LCK_btr_dont_gc) &&
1236
1237
lock->lbl_length == Jrd::PageNumber::getLockLen ())
1237
1238
{
1238
1239
// Since fb 2.1 lock keys for page numbers (series == 3) contains
1239
1240
// page space number in high long of two-longs key. Lets print it
1240
1241
// in <page_space>:<page_number> format
1241
1242
const UCHAR* q = lock->lbl_key ;
1242
1243
1243
- SLONG key ;
1244
- memcpy (&key , q, sizeof (SLONG ));
1245
- q += sizeof (SLONG );
1244
+ ULONG pageno ;
1245
+ memcpy (&pageno , q, sizeof (ULONG ));
1246
+ q += sizeof (ULONG );
1246
1247
1247
1248
ULONG pg_space;
1248
- memcpy (&pg_space, q, sizeof (SLONG ));
1249
+ memcpy (&pg_space, q, sizeof (ULONG ));
1249
1250
1250
- FPRINTF (outfile, " \t Key: %04" ULONGFORMAT" :%06" SLONGFORMAT " ," , pg_space, key );
1251
+ FPRINTF (outfile, " \t Key: %04" ULONGFORMAT" :%06" ULONGFORMAT " ," , pg_space, pageno );
1251
1252
}
1252
- else if (lock->lbl_length == 4 )
1253
+ else if ((lock->lbl_series == Jrd::LCK_relation ||
1254
+ lock->lbl_series == Jrd::LCK_rel_gc) &&
1255
+ lock->lbl_length == sizeof (ULONG) + sizeof (SINT64)) // Jrd::jrd_rel::getRelLockKeyLength()
1256
+ {
1257
+ const UCHAR* q = lock->lbl_key ;
1258
+
1259
+ ULONG rel_id;
1260
+ memcpy (&rel_id, q, sizeof (ULONG));
1261
+ q += sizeof (ULONG);
1262
+
1263
+ SINT64 instance_id;
1264
+ memcpy (&instance_id, q, sizeof (SINT64));
1265
+
1266
+ FPRINTF (outfile, " \t Key: %04" ULONGFORMAT" :%09" SQUADFORMAT" ," , rel_id, instance_id);
1267
+ }
1268
+ else if ((lock->lbl_series == Jrd::LCK_tra ||
1269
+ lock->lbl_series == Jrd::LCK_tra_pc ||
1270
+ lock->lbl_series == Jrd::LCK_attachment ||
1271
+ lock->lbl_series == Jrd::LCK_monitor ||
1272
+ lock->lbl_series == Jrd::LCK_cancel) &&
1273
+ lock->lbl_length == sizeof (SINT64))
1274
+ {
1275
+ SINT64 key;
1276
+ memcpy (&key, lock->lbl_key , lock->lbl_length );
1277
+
1278
+ FPRINTF (outfile, " \t Key: %09" SQUADFORMAT" ," , key);
1279
+ }
1280
+ else if (lock->lbl_series == Jrd::LCK_record_gc &&
1281
+ lock->lbl_length == sizeof (SINT64))
1282
+ {
1283
+ SINT64 key;
1284
+ memcpy (&key, lock->lbl_key , lock->lbl_length );
1285
+
1286
+ const ULONG pageno = key >> 16 ;
1287
+ const ULONG line = (ULONG) (key & MAX_USHORT);
1288
+
1289
+ FPRINTF (outfile, " \t Key: %06" ULONGFORMAT" :%04" ULONGFORMAT" ," , pageno, line);
1290
+ }
1291
+ else if ((lock->lbl_series == Jrd::LCK_idx_exist ||
1292
+ lock->lbl_series == Jrd::LCK_expression) &&
1293
+ lock->lbl_length == sizeof (SLONG))
1294
+ {
1295
+ SLONG key;
1296
+ memcpy (&key, lock->lbl_key , lock->lbl_length );
1297
+
1298
+ const ULONG rel_id = key >> 16 ;
1299
+ const ULONG idx_id = (ULONG) (key & MAX_USHORT);
1300
+
1301
+ FPRINTF (outfile, " \t Key: %04" ULONGFORMAT" :%04" ULONGFORMAT" ," , rel_id, idx_id);
1302
+ }
1303
+ else if (lock->lbl_length == sizeof (SLONG))
1253
1304
{
1254
1305
SLONG key;
1255
- memcpy (&key, lock->lbl_key , 4 );
1306
+ memcpy (&key, lock->lbl_key , lock-> lbl_length );
1256
1307
1257
1308
FPRINTF (outfile, " \t Key: %06" SLONGFORMAT" ," , key);
1258
1309
}
1310
+ else if (lock->lbl_length == 0 )
1311
+ {
1312
+ FPRINTF (outfile, " \t Key: <none>" );
1313
+ }
1259
1314
else
1260
1315
{
1261
1316
UCHAR temp[512 ];
0 commit comments