1
0
mirror of https://github.com/MariaDB/server.git synced 2025-11-09 11:41:36 +03:00
Files
mariadb/tpool
Vladislav Vaintroub 21395bbb6c MDEV-37728: Fix shutdown deadlock between thr_timer_end and set_period
The mysys timer (thr_timer) could deadlock with
srv_thread_pool_end() due to lock inversion:

- LOCK_timer is held during the entire timer action routine.
- timer action executed in mysys thread may lock timer_generic::m_mtx.
- main thread  holding the same timer_generic::m_mtx calls
  thr_timer_end(), which also needs LOCK_timer.

This inversion can cause a very rare shutdown deadlock, when the
threadpool extends the maintenance() period after idling for a
minute and shutdown occurs simultaneously.

Workaround: Use try_lock in timer_generic::set_period() to avoid blocking,
to break the deadlock cycle, and ignore errors.

Root cause is the thr_timer holds the global LOCK_timer for the
entire duration of every timer action. This makes it difficult or
impossible to use additional locks safely inside timer routines.
Fortunately, in this case a failed try_lock has no impact.
2025-09-24 22:25:59 +02:00
..
2025-06-23 13:51:52 +03:00
2023-11-22 18:14:11 +02:00
2025-06-23 13:51:52 +03:00
2025-06-23 13:51:52 +03:00
2020-01-12 21:34:59 +01:00