Skip to content
  • Jean Boussier's avatar
    161cffb3
    Fix a race condition with interned strings sweeping. · 161cffb3
    Jean Boussier authored
    [Bug #21172]
    
    This fixes a rare CI failure.
    
    The timeline of the race condition is:
    
    - A `"foo" oid=1` string is interned.
    - `"foo" oid=1` is no longer referenced and will be swept in the future.
    - Another `"foo" oid=2` string is interned.
    - `register_fstring` finds `"foo" oid=1`, but since it is about to be swept,
      removes it from `fstring_table` and insert `"foo" oid=2` instead.
    - `"foo" oid=1` is swept, since it has the `RSTRING_FSTR` flag,
      a `st_delete` is issued in `fstring_table` which removes `"foo" oid=2`.
    
    I don't know how to reproduce this bug consistently in a single test
    case.
    161cffb3
    Fix a race condition with interned strings sweeping.
    Jean Boussier authored
    [Bug #21172]
    
    This fixes a rare CI failure.
    
    The timeline of the race condition is:
    
    - A `"foo" oid=1` string is interned.
    - `"foo" oid=1` is no longer referenced and will be swept in the future.
    - Another `"foo" oid=2` string is interned.
    - `register_fstring` finds `"foo" oid=1`, but since it is about to be swept,
      removes it from `fstring_table` and insert `"foo" oid=2` instead.
    - `"foo" oid=1` is swept, since it has the `RSTRING_FSTR` flag,
      a `st_delete` is issued in `fstring_table` which removes `"foo" oid=2`.
    
    I don't know how to reproduce this bug consistently in a single test
    case.
Loading