mirror of
https://github.com/MariaDB/server.git
synced 2026-10-23 18:49:29 +03:00
- By default fil_crypt_must_default_encrypt() holds, and then fil_crypt_thread() waits indefinitely in wait_for_work() once the default_encrypt list has been exhausted. A tablespace for which no fil_crypt_threads_signal() is issued would therefore never be encrypted at all. fil_ibd_create(): Invoke fil_crypt_threads_signal() after fil_space_t::clear_stopped() dict_load_tablespace(): Invoke fil_crypt_threads_signal(), because fil_ibd_open() may have added the tablespace to fil_system.default_encrypt_tables. This is the single point through which every dictionary-driven tablespace open passes; it is only invoked by dict_load_table_one(), hence by dict_sys_t::load_table(). The call in dict_table_open_on_name() does not cover it, because that function returns a cached table before reaching the wake-up. A table first loaded by dict_table_open_on_id() would thus never be signalled, neither then nor later. row_import_cleanup(): Do not invoke fil_crypt_threads_signal(). fil_crypt_add_imported_space() registers it afterwards and broadcasts. fil_crypt_threads_signal(): Also return early when no encryption thread is running. srv_n_fil_crypt_threads_started: Declare as Atomic_relaxed<uint>, for the unlocked read in fil_crypt_threads_signal().