-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Major - P3
-
Affects Version/s: None
-
Component/s: Layered Tables
-
None
-
Storage Engines, Storage Engines - Foundations
-
SE Foundations - 2025-11-21
-
0
In __layered_iterate_ingest_tables_for_gc_pruning, we can leave the function with a lock held. Here's the gist of the relevant parts in the function:
static int
__layered_iterate_ingest_tables_for_gc_pruning(...)
{
__wt_spin_lock(session, &manager->layered_table_lock);
for (i = 0; i < manager->open_layered_table_count; i++) {
...
WT_ERR(__wt_buf_setstr(session, layered_table_uri_buf, entry->layered_uri));
...
__wt_spin_unlock(session, &manager->layered_table_lock);
=> WT_ERR(__layered_update_ingest_table_prune_timestamp(
session, layered_table_uri_buf->data, checkpoint_timestamp, uri_at_checkpoint_buf));
__wt_spin_lock(session, &manager->layered_table_lock);
}
__wt_spin_unlock(session, &manager->layered_table_lock);
err:
...
}
If the WT_ERR at the => fails, the spin lock is left held.