• Oleksandr Byelkin's avatar
    MDEV-14526: MariaDB keeps crashing under load when query_cache_type is changed · 5fe1d7d0
    Oleksandr Byelkin authored
    The problem was in such scenario:
    T1 - starts registering query and locked QC
    T2 - starts disabling QC and wait for UNLOCK
    T1 - unlock QC
    T2 - disable QC and destroy signals without waiting for query unlock
    T1 a) - not yet unlocked query in qc and crash on attempt to unlock because
            QC signals are destroyed
       b) if above was done before destruction, it execute end_of results first
          time at exit on after try_lock which see QC disables and return TRUE.
          But it do not reset query_cache_tls->first_query_block which lead to
          second call of end_of_result when diagnostic arena has already
          inappropriate status (not is_eof()).
    
    Fix is:
      1) wait for all queries unlocked before destroying them by locking and
         unlocking
      2) remove query_cache_tls->first_query_block if QC disabled
    5fe1d7d0
sql_cache.cc 159 KB