layered_table_lock can be left locked in error condition

XMLWordPrintableJSON

    • 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.

            Assignee:
            Ivan Kochin
            Reporter:
            Donald Anderson
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: