Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-15356

tp_timeout_handler acquires the LOCK_thd_kill before calling set_killed which tries to acquire the same lock.

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 10.3
    • Fix Version/s: 10.3.5
    • Component/s: Locking
    • Labels:
    • Environment:
      SLES, ppc64le

      Description

      Server was at state where no new connections where being accepted and existing connections wheren't processing any more SQL (ycsb data load).

      10.3 at revision ba125eca551e3f5faee9f6d7ebed290f04cfc8fd

      regression introduced c2118a08b144. Doesn't affected 10.2.

      From backtrace:

      Thread 164 (Thread 0x77d05f7ff160 (LWP 526603)):
      #0  0x00007fffab927d28 in __lll_lock_wait (futex=0x200, private=<optimized out>) at lowlevellock.c:46
      #1  0x00007fffab91c784 in __GI___pthread_mutex_lock (mutex=0x77936c0026e0) at ../nptl/pthread_mutex_lock.c:135
      #2  0x000000011b1fdb78 in inline_mysql_mutex_lock (src_line=3829, src_file=0x11b9be898 "/home/danielgb/mariadb-server/sql/sql_class.h", that=0x77936c0026e0) at /home/danielgb/mariadb-server/include/mysql/psi/mysql_thread.h:712
      #3  THD::set_killed (killed_err_msg_arg=0x0, killed_errno_arg=0, killed_arg=KILL_WAIT_TIMEOUT, this=0x77936c000ce8) at /home/danielgb/mariadb-server/sql/sql_class.h:3829
      #4  tp_timeout_handler (c=0x10c43dc4a20) at /home/danielgb/mariadb-server/sql/threadpool_common.cc:473
      #5  0x000000011b2b6fc4 in timeout_check (timer=<optimized out>) at /home/danielgb/mariadb-server/sql/threadpool_generic.cc:609
      #6  timer_thread (param=0x11c0effd0 <pool_timer>) at /home/danielgb/mariadb-server/sql/threadpool_generic.cc:674
      #7  0x00007fffab918770 in start_thread (arg=0x7fffab918670 <start_thread>) at pthread_create.c:465
      #8  0x00007fffab035e38 in clone () at ../sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S:82
       
       
      (gdb) up
      #3  THD::set_killed (killed_err_msg_arg=0x0, killed_errno_arg=0, killed_arg=KILL_WAIT_TIMEOUT, this=0x77936c000ce8) at /home/danielgb/mariadb-server/sql/sql_class.h:3829
      3829        mysql_mutex_lock(&LOCK_thd_kill);
      (gdb) p LOCK_thd_kill
      $2 = {m_mutex = {__data = {__lock = 2, __count = 0, __owner = 526603, __nusers = 1, __kind = 3, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, 
          __size = "\002\000\000\000\000\000\000\000\v\t\b\000\001\000\000\000\003", '\000' <repeats 22 times>, __align = 2}, m_psi = 0x0}
      

      tp_timeout_handler acquires the LOCK_thd_kill before calling set_killed which tries to acquire the same lock.

        Attachments

        1. my.cnf
          0.7 kB
        2. stalled.txt
          1.49 MB

          Activity

            People

            • Assignee:
              wlad Vladislav Vaintroub
              Reporter:
              danblack Daniel Black
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: