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

InnoDB: Failing assertion: lock->lock_word.load(std::memory_order_relaxed) == X_LOCK_DECR upon server shutdown

Details

    Description

      10.4 2cff807d

      2020-01-03 14:39:50 0x7f9534216700  InnoDB: Assertion failure in file /data/src/10.4/storage/innobase/sync/sync0rw.cc line 255
      InnoDB: Failing assertion: lock->lock_word.load(std::memory_order_relaxed) == X_LOCK_DECR
       
      Query (0x7f94c0011d68): ALTER TABLE t1 CHANGE IF EXISTS b a INT, ALGORITHM=COPY /* QNO 169 CON_ID 12 */
      Connection ID (thread ID): 12
      Status: KILL_SERVER
      

      #6  0x00005653d0678a6a in ut_dbg_assertion_failed (expr=0x5653d0e03f18 "lock->lock_word.load(std::memory_order_relaxed) == X_LOCK_DECR", file=0x5653d0e03e90 "/data/src/10.4/storage/innobase/sync/sync0rw.cc", line=255) at /data/src/10.4/storage/innobase/ut/ut0dbg.cc:60
      #7  0x00005653d061c65f in rw_lock_free_func (lock=0x7f94c00b1e18) at /data/src/10.4/storage/innobase/sync/sync0rw.cc:255
      #8  0x00005653d07d3a7e in pfs_rw_lock_free_func (lock=0x7f94c00b1e18) at /data/src/10.4/storage/innobase/include/sync0rw.ic:617
      #9  0x00005653d07d7d89 in fts_cache_destroy (cache=0x7f94c00b1e18) at /data/src/10.4/storage/innobase/fts/fts0fts.cc:287
      #10 0x00005653d07e2fb4 in fts_t::~fts_t (this=0x7f94c00844d8, __in_chrg=<optimized out>) at /data/src/10.4/storage/innobase/fts/fts0fts.cc:5349
      #11 0x00005653d07e3094 in fts_free (table=0x7f94c043d0a8) at /data/src/10.4/storage/innobase/fts/fts0fts.cc:5386
      #12 0x00005653d059a3e4 in row_drop_ancillary_fts_tables (table=0x7f94c043d0a8, trx=0x7f95218e4830) at /data/src/10.4/storage/innobase/row/row0mysql.cc:3248
      #13 0x00005653d059b7fb in row_drop_table_for_mysql (name=0x7f9534210e80 "test/#sql-73c7_c", trx=0x7f95218e4830, sqlcom=SQLCOM_ALTER_TABLE, create_failed=false, nonatomic=true) at /data/src/10.4/storage/innobase/row/row0mysql.cc:3728
      #14 0x00005653d0413245 in ha_innobase::delete_table (this=0x7f94c0013a10, name=0x7f94c00c7058 "./test/#sql-73c7_c", sqlcom=SQLCOM_ALTER_TABLE) at /data/src/10.4/storage/innobase/handler/ha_innodb.cc:13184
      #15 0x00005653d03fc780 in ha_innobase::delete_table (this=0x7f94c0013a10, name=0x7f94c00c7058 "./test/#sql-73c7_c") at /data/src/10.4/storage/innobase/handler/ha_innodb.cc:13309
      #16 0x00005653d01aed5c in handler::ha_delete_table (this=0x7f94c0013a10, name=0x7f94c00c7058 "./test/#sql-73c7_c") at /data/src/10.4/sql/handler.cc:4695
      #17 0x00005653d00d3783 in THD::rm_temporary_table (this=0x7f94c0000af0, base=0x5653d284a5c0, path=0x7f94c00c7058 "./test/#sql-73c7_c") at /data/src/10.4/sql/temporary_tables.cc:701
      #18 0x00005653d00d5663 in THD::free_tmp_table_share (this=0x7f94c0000af0, share=0x7f94c00c6ac0, delete_table=true) at /data/src/10.4/sql/temporary_tables.cc:1464
      #19 0x00005653d00d35bb in THD::drop_temporary_table (this=0x7f94c0000af0, table=0x7f94c043aa80, is_trans=0x0, delete_table=true) at /data/src/10.4/sql/temporary_tables.cc:664
      #20 0x00005653cff3810b in mysql_alter_table (thd=0x7f94c0000af0, new_db=0x7f94c00052b0, new_name=0x7f94c00056b8, create_info=0x7f9534213d40, table_list=0x7f94c0011eb0, alter_info=0x7f9534213c80, order_num=0, order=0x0, ignore=false) at /data/src/10.4/sql/sql_table.cc:10470
      #21 0x00005653cffcf0cf in Sql_cmd_alter_table::execute (this=0x7f94c00126a8, thd=0x7f94c0000af0) at /data/src/10.4/sql/sql_alter.cc:508
      #22 0x00005653cfe4db75 in mysql_execute_command (thd=0x7f94c0000af0) at /data/src/10.4/sql/sql_parse.cc:6102
      #23 0x00005653cfe53237 in mysql_parse (thd=0x7f94c0000af0, rawbuf=0x7f94c0011d68 "ALTER TABLE t1 CHANGE IF EXISTS b a INT, ALGORITHM=COPY /* QNO 169 CON_ID 12 */", length=79, parser_state=0x7f95342151b0, is_com_multi=false, is_next_command=false) at /data/src/10.4/sql/sql_parse.cc:7901
      #24 0x00005653cfe3e3dc in dispatch_command (command=COM_QUERY, thd=0x7f94c0000af0, packet=0x7f94c037ebf1 "ALTER TABLE t1 CHANGE IF EXISTS b a INT, ALGORITHM=COPY /* QNO 169 CON_ID 12 */ ", packet_length=80, is_com_multi=false, is_next_command=false) at /data/src/10.4/sql/sql_parse.cc:1842
      #25 0x00005653cfe3ca69 in do_command (thd=0x7f94c0000af0) at /data/src/10.4/sql/sql_parse.cc:1360
      #26 0x00005653cffc59df in do_handle_one_connection (connect=0x5653d3484930) at /data/src/10.4/sql/sql_connect.cc:1412
      #27 0x00005653cffc572e in handle_one_connection (arg=0x5653d3484930) at /data/src/10.4/sql/sql_connect.cc:1316
      #28 0x00007f95391754a4 in start_thread (arg=0x7f9534216700) at pthread_create.c:456
      #29 0x00007f95372a9d0f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
      

      Reproducible on 10.2-10.4.
      Both debug and non-debug are affected.
      Couldn't reproduce on 10.1 and 10.5.

      To reproduce:

      git clone https://github.com/MariaDB/randgen --branch mdev21329 rqg-mdev21329
      cd rqg-mdev21329
      perl runall-new.pl --basedir=<your basedir>  --grammar=mdev21329.yy --duration=600 --threads=2 --scenario=Restart --skip-gendata --seed=1 --scenario-restart-interval=20 --vardir=/dev/shm/vardir-mdev21329
      

      Remember to set the path to the basedir on the command line.

      The test runs the following two statements concurrently on a table with fulltext index:

          INSERT INTO t1 () VALUES () |
          ALTER TABLE t1 CHANGE IF EXISTS <field> <field> INT, ALGORITHM=COPY;
      

      and restarts the server every 20 seconds.

      Currently it takes a few minutes to fail on my machine, but it can vary on different machines and builds.

      Variations of the assertion representation:

      10.2 ef1e488b

      2020-01-03 14:49:39 0x7f8f59057700  InnoDB: Assertion failure in file /data/src/10.2/storage/innobase/sync/sync0rw.cc line 259
      InnoDB: Failing assertion: lock->lock_word == X_LOCK_DECR
      

      10.3 02e30069

      2020-01-03 14:48:58 0x7fbc04232700  InnoDB: Assertion failure in file /data/src/10.3/storage/innobase/sync/sync0rw.cc line 258
      InnoDB: Failing assertion: my_atomic_load32_explicit(&lock->lock_word, MY_MEMORY_ORDER_RELAXED) == X_LOCK_DECR
      

      Attachments

        Issue Links

          Activity

            With rr I'm persistently getting SIGSEGV with the same build and test where I am getting the assertion failure without rr.

            10.4 79e32e47a1115 with rr

            #0  0x0000000070000002 in ?? ()
            #1  0x00007f30c797bb27 in _raw_syscall () at /home/roc/rr/rr/src/preload/raw_syscall.S:120
            #2  0x00007f30c7976e7e in traced_raw_syscall (call=<optimized out>) at /home/roc/rr/rr/src/preload/syscallbuf.c:229
            #3  0x00007f30c797ab55 in syscall_hook_internal (call=0x7f303b7fffa0) at /home/roc/rr/rr/src/preload/syscallbuf.c:2953
            #4  syscall_hook (call=0x7f303b7fffa0) at /home/roc/rr/rr/src/preload/syscallbuf.c:2987
            #5  0x00007f30c7976d5a in _syscall_hook_trampoline () at /home/roc/rr/rr/src/preload/syscall_hook.S:282
            #6  0x00007f30c7976d8a in __morestack () at /home/roc/rr/rr/src/preload/syscall_hook.S:417
            #7  0x00007f30c7976de3 in _syscall_hook_trampoline_89_c2_f7_da () at /home/roc/rr/rr/src/preload/syscall_hook.S:463
            #8  0x00007f30c6e9d2d5 in __pthread_kill (threadid=<optimized out>, signo=11) at ../sysdeps/unix/sysv/linux/pthread_kill.c:57
            #9  0x00005563623f2555 in my_write_core (sig=11) at /home/mdbe/MDEV-21329/10.4/mysys/stacktrace.c:386
            #10 0x0000556361b5360b in handle_fatal_signal (sig=11) at /home/mdbe/MDEV-21329/10.4/sql/signal_handler.cc:343
            #11 <signal handler called>
            #12 0x0000556361dce0d5 in PolicyMutex<TTASEventMutex<GenericPolicy> >::pfs_begin_lock (this=0x0, state=0x7f30940a7640, name=0x55636282f550 "/home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0opt.cc", line=2607)
                at /home/mdbe/MDEV-21329/10.4/storage/innobase/include/ib0mutex.h:709
            #13 0x0000556361dcc499 in PolicyMutex<TTASEventMutex<GenericPolicy> >::enter (this=0x0, n_spins=30, n_delay=4, name=0x55636282f550 "/home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0opt.cc", line=2607)
                at /home/mdbe/MDEV-21329/10.4/storage/innobase/include/ib0mutex.h:589
            #14 0x00005563621a5c44 in fts_optimize_remove_table (table=0x7f3024106db0) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0opt.cc:2607
            #15 0x0000556361f55b6e in row_drop_table_for_mysql (name=0x7f30940a7f60 "test/#sql2-1419-c", trx=0x7f30af984140, sqlcom=SQLCOM_ALTER_TABLE, create_failed=false, nonatomic=true)
                at /home/mdbe/MDEV-21329/10.4/storage/innobase/row/row0mysql.cc:3392
            #16 0x0000556361dcb190 in ha_innobase::delete_table (this=0x7f3024014b78, name=0x7f30940a9a30 "./test/#sql2-1419-c", sqlcom=SQLCOM_ALTER_TABLE) at /home/mdbe/MDEV-21329/10.4/storage/innobase/handler/ha_innodb.cc:13095
            #17 0x0000556361db3888 in ha_innobase::delete_table (this=0x7f3024014b78, name=0x7f30940a9a30 "./test/#sql2-1419-c") at /home/mdbe/MDEV-21329/10.4/storage/innobase/handler/ha_innodb.cc:13220
            #18 0x0000556361b62fc0 in handler::ha_delete_table (this=0x7f3024014b78, name=0x7f30940a9a30 "./test/#sql2-1419-c") at /home/mdbe/MDEV-21329/10.4/sql/handler.cc:4747
            #19 0x0000556361b5bf39 in ha_delete_table (thd=0x7f3024000d50, table_type=0x556365aacc10, path=0x7f30940a9a30 "./test/#sql2-1419-c", db=0x7f30940ab750, alias=0x7f30940a9e30, generate_warning=false)
                at /home/mdbe/MDEV-21329/10.4/sql/handler.cc:2624
            #20 0x00005563618d8da3 in quick_rm_table (thd=0x7f3024000d50, base=0x556365aacc10, db=0x7f30940ab750, table_name=0x7f30940a9e30, flags=3, table_path=0x0) at /home/mdbe/MDEV-21329/10.4/sql/sql_table.cc:2767
            #21 0x00005563618eec7f in mysql_alter_table (thd=0x7f3024000d50, new_db=0x7f3024005518, new_name=0x7f3024005920, create_info=0x7f30940ac320, table_list=0x7f3024012120, alter_info=0x7f30940ac260, order_num=0, order=0x0, ignore=false)
                at /home/mdbe/MDEV-21329/10.4/sql/sql_table.cc:10422
            #22 0x0000556361986202 in Sql_cmd_alter_table::execute (this=0x7f3024012918, thd=0x7f3024000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_alter.cc:514
            #23 0x0000556361802bcb in mysql_execute_command (thd=0x7f3024000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:6098
            #24 0x00005563618080ad in mysql_parse (thd=0x7f3024000d50, rawbuf=0x7f3024011fd8 "ALTER TABLE t1 CHANGE IF EXISTS b b INT, ALGORITHM=COPY /* QNO 49 CON_ID 12 */", length=78, parser_state=0x7f30940ad5a0, is_com_multi=false, 
                is_next_command=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:7896
            #25 0x00005563617f45e7 in dispatch_command (command=COM_QUERY, thd=0x7f3024000d50, packet=0x7f30241e7151 "ALTER TABLE t1 CHANGE IF EXISTS b b INT, ALGORITHM=COPY /* QNO 49 CON_ID 12 */ ", packet_length=79, is_com_multi=false, 
                is_next_command=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:1834
            #26 0x00005563617f2d88 in do_command (thd=0x7f3024000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:1352
            #27 0x000055636197cc24 in do_handle_one_connection (connect=0x5563666f7ed0) at /home/mdbe/MDEV-21329/10.4/sql/sql_connect.cc:1412
            #28 0x000055636197c973 in handle_one_connection (arg=0x5563666f7ed0) at /home/mdbe/MDEV-21329/10.4/sql/sql_connect.cc:1316
            #29 0x00007f30c6e956db in start_thread (arg=0x7f30940ae700) at pthread_create.c:463
            #30 0x00007f30c5923a3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
            

            10.4 79e32e47a1115 without rr

            2020-09-29 16:21:06 0x7f2e00182700  InnoDB: Assertion failure in file /home/mdbe/MDEV-21329/10.4/storage/innobase/sync/sync0rw.cc line 252
            InnoDB: Failing assertion: lock->lock_word == X_LOCK_DECR
             
            #5  0x00007f2e159498b1 in __GI_abort () at abort.c:79
            #6  0x000055cd30c3833a in ut_dbg_assertion_failed (expr=0x55cd313ab180 "lock->lock_word == X_LOCK_DECR", file=0x55cd313ab0f0 "/home/mdbe/MDEV-21329/10.4/storage/innobase/sync/sync0rw.cc", line=252) at /home/mdbe/MDEV-21329/10.4/storage/innobase/ut/ut0dbg.cc:60
            #7  0x000055cd30bdf72b in rw_lock_free_func (lock=0x7f2d94298100) at /home/mdbe/MDEV-21329/10.4/storage/innobase/sync/sync0rw.cc:252
            #8  0x000055cd30d93f7d in pfs_rw_lock_free_func (lock=0x7f2d94298100) at /home/mdbe/MDEV-21329/10.4/storage/innobase/include/sync0rw.ic:605
            #9  0x000055cd30d99050 in fts_cache_destroy (cache=0x7f2d94298100) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0fts.cc:287
            #10 0x000055cd30da42ce in fts_t::~fts_t (this=0x7f2d9445eea0, __in_chrg=<optimized out>) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0fts.cc:5317
            #11 0x000055cd30da43ae in fts_free (table=0x7f2d98079aa0) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0fts.cc:5354
            #12 0x000055cd30b5f319 in row_drop_ancillary_fts_tables (table=0x7f2d98079aa0, trx=0x7f2e00184140) at /home/mdbe/MDEV-21329/10.4/storage/innobase/row/row0mysql.cc:3241
            #13 0x000055cd30b60681 in row_drop_table_for_mysql (name=0x7f2e0017d470 "test/#sql-7435_c", trx=0x7f2e00184140, sqlcom=SQLCOM_ALTER_TABLE, create_failed=false, nonatomic=true) at /home/mdbe/MDEV-21329/10.4/storage/innobase/row/row0mysql.cc:3692
            #14 0x000055cd309d5190 in ha_innobase::delete_table (this=0x7f2d94015e50, name=0x7f2d942d9070 "./test/#sql-7435_c", sqlcom=SQLCOM_ALTER_TABLE) at /home/mdbe/MDEV-21329/10.4/storage/innobase/handler/ha_innodb.cc:13095
            #15 0x000055cd309bd888 in ha_innobase::delete_table (this=0x7f2d94015e50, name=0x7f2d942d9070 "./test/#sql-7435_c") at /home/mdbe/MDEV-21329/10.4/storage/innobase/handler/ha_innodb.cc:13220
            #16 0x000055cd3076cfc0 in handler::ha_delete_table (this=0x7f2d94015e50, name=0x7f2d942d9070 "./test/#sql-7435_c") at /home/mdbe/MDEV-21329/10.4/sql/handler.cc:4747
            #17 0x000055cd3068fc33 in THD::rm_temporary_table (this=0x7f2d94000d50, base=0x55cd33b8fc10, path=0x7f2d942d9070 "./test/#sql-7435_c") at /home/mdbe/MDEV-21329/10.4/sql/temporary_tables.cc:701
            #18 0x000055cd30691b37 in THD::free_tmp_table_share (this=0x7f2d94000d50, share=0x7f2d942d8ad0, delete_table=true) at /home/mdbe/MDEV-21329/10.4/sql/temporary_tables.cc:1462
            #19 0x000055cd3068fa6b in THD::drop_temporary_table (this=0x7f2d94000d50, table=0x7f2d943980f0, is_trans=0x0, delete_table=true) at /home/mdbe/MDEV-21329/10.4/sql/temporary_tables.cc:664
            #20 0x000055cd304f919c in mysql_alter_table (thd=0x7f2d94000d50, new_db=0x7f2d94005518, new_name=0x7f2d94005920, create_info=0x7f2e00180320, table_list=0x7f2d940142e0, alter_info=0x7f2e00180260, order_num=0, order=0x0, ignore=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_table.cc:10508
            #21 0x000055cd30590202 in Sql_cmd_alter_table::execute (this=0x7f2d94014ad8, thd=0x7f2d94000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_alter.cc:514
            #22 0x000055cd3040cbcb in mysql_execute_command (thd=0x7f2d94000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:6098
            #23 0x000055cd304120ad in mysql_parse (thd=0x7f2d94000d50, rawbuf=0x7f2d94014198 "ALTER TABLE t1 CHANGE IF EXISTS b b INT, ALGORITHM=COPY /* QNO 46 CON_ID 12 */", length=78, parser_state=0x7f2e001815a0, is_com_multi=false, is_next_command=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:7896
            #24 0x000055cd303fe5e7 in dispatch_command (command=COM_QUERY, thd=0x7f2d94000d50, packet=0x7f2d94008661 "ALTER TABLE t1 CHANGE IF EXISTS b b INT, ALGORITHM=COPY /* QNO 46 CON_ID 12 */ ", packet_length=79, is_com_multi=false, is_next_command=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:1834
            #25 0x000055cd303fcd88 in do_command (thd=0x7f2d94000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:1352
            #26 0x000055cd30586c24 in do_handle_one_connection (connect=0x55cd347d7c70) at /home/mdbe/MDEV-21329/10.4/sql/sql_connect.cc:1412
            #27 0x000055cd30586973 in handle_one_connection (arg=0x55cd347d7c70) at /home/mdbe/MDEV-21329/10.4/sql/sql_connect.cc:1316
            #28 0x00007f2e16f9c6db in start_thread (arg=0x7f2e00182700) at pthread_create.c:463
            #29 0x00007f2e15a2aa3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
            

            elenst Elena Stepanova added a comment - With rr I'm persistently getting SIGSEGV with the same build and test where I am getting the assertion failure without rr . 10.4 79e32e47a1115 with rr #0 0x0000000070000002 in ?? () #1 0x00007f30c797bb27 in _raw_syscall () at /home/roc/rr/rr/src/preload/raw_syscall.S:120 #2 0x00007f30c7976e7e in traced_raw_syscall (call=<optimized out>) at /home/roc/rr/rr/src/preload/syscallbuf.c:229 #3 0x00007f30c797ab55 in syscall_hook_internal (call=0x7f303b7fffa0) at /home/roc/rr/rr/src/preload/syscallbuf.c:2953 #4 syscall_hook (call=0x7f303b7fffa0) at /home/roc/rr/rr/src/preload/syscallbuf.c:2987 #5 0x00007f30c7976d5a in _syscall_hook_trampoline () at /home/roc/rr/rr/src/preload/syscall_hook.S:282 #6 0x00007f30c7976d8a in __morestack () at /home/roc/rr/rr/src/preload/syscall_hook.S:417 #7 0x00007f30c7976de3 in _syscall_hook_trampoline_89_c2_f7_da () at /home/roc/rr/rr/src/preload/syscall_hook.S:463 #8 0x00007f30c6e9d2d5 in __pthread_kill (threadid=<optimized out>, signo=11) at ../sysdeps/unix/sysv/linux/pthread_kill.c:57 #9 0x00005563623f2555 in my_write_core (sig=11) at /home/mdbe/MDEV-21329/10.4/mysys/stacktrace.c:386 #10 0x0000556361b5360b in handle_fatal_signal (sig=11) at /home/mdbe/MDEV-21329/10.4/sql/signal_handler.cc:343 #11 <signal handler called> #12 0x0000556361dce0d5 in PolicyMutex<TTASEventMutex<GenericPolicy> >::pfs_begin_lock (this=0x0, state=0x7f30940a7640, name=0x55636282f550 "/home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0opt.cc", line=2607) at /home/mdbe/MDEV-21329/10.4/storage/innobase/include/ib0mutex.h:709 #13 0x0000556361dcc499 in PolicyMutex<TTASEventMutex<GenericPolicy> >::enter (this=0x0, n_spins=30, n_delay=4, name=0x55636282f550 "/home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0opt.cc", line=2607) at /home/mdbe/MDEV-21329/10.4/storage/innobase/include/ib0mutex.h:589 #14 0x00005563621a5c44 in fts_optimize_remove_table (table=0x7f3024106db0) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0opt.cc:2607 #15 0x0000556361f55b6e in row_drop_table_for_mysql (name=0x7f30940a7f60 "test/#sql2-1419-c", trx=0x7f30af984140, sqlcom=SQLCOM_ALTER_TABLE, create_failed=false, nonatomic=true) at /home/mdbe/MDEV-21329/10.4/storage/innobase/row/row0mysql.cc:3392 #16 0x0000556361dcb190 in ha_innobase::delete_table (this=0x7f3024014b78, name=0x7f30940a9a30 "./test/#sql2-1419-c", sqlcom=SQLCOM_ALTER_TABLE) at /home/mdbe/MDEV-21329/10.4/storage/innobase/handler/ha_innodb.cc:13095 #17 0x0000556361db3888 in ha_innobase::delete_table (this=0x7f3024014b78, name=0x7f30940a9a30 "./test/#sql2-1419-c") at /home/mdbe/MDEV-21329/10.4/storage/innobase/handler/ha_innodb.cc:13220 #18 0x0000556361b62fc0 in handler::ha_delete_table (this=0x7f3024014b78, name=0x7f30940a9a30 "./test/#sql2-1419-c") at /home/mdbe/MDEV-21329/10.4/sql/handler.cc:4747 #19 0x0000556361b5bf39 in ha_delete_table (thd=0x7f3024000d50, table_type=0x556365aacc10, path=0x7f30940a9a30 "./test/#sql2-1419-c", db=0x7f30940ab750, alias=0x7f30940a9e30, generate_warning=false) at /home/mdbe/MDEV-21329/10.4/sql/handler.cc:2624 #20 0x00005563618d8da3 in quick_rm_table (thd=0x7f3024000d50, base=0x556365aacc10, db=0x7f30940ab750, table_name=0x7f30940a9e30, flags=3, table_path=0x0) at /home/mdbe/MDEV-21329/10.4/sql/sql_table.cc:2767 #21 0x00005563618eec7f in mysql_alter_table (thd=0x7f3024000d50, new_db=0x7f3024005518, new_name=0x7f3024005920, create_info=0x7f30940ac320, table_list=0x7f3024012120, alter_info=0x7f30940ac260, order_num=0, order=0x0, ignore=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_table.cc:10422 #22 0x0000556361986202 in Sql_cmd_alter_table::execute (this=0x7f3024012918, thd=0x7f3024000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_alter.cc:514 #23 0x0000556361802bcb in mysql_execute_command (thd=0x7f3024000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:6098 #24 0x00005563618080ad in mysql_parse (thd=0x7f3024000d50, rawbuf=0x7f3024011fd8 "ALTER TABLE t1 CHANGE IF EXISTS b b INT, ALGORITHM=COPY /* QNO 49 CON_ID 12 */", length=78, parser_state=0x7f30940ad5a0, is_com_multi=false, is_next_command=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:7896 #25 0x00005563617f45e7 in dispatch_command (command=COM_QUERY, thd=0x7f3024000d50, packet=0x7f30241e7151 "ALTER TABLE t1 CHANGE IF EXISTS b b INT, ALGORITHM=COPY /* QNO 49 CON_ID 12 */ ", packet_length=79, is_com_multi=false, is_next_command=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:1834 #26 0x00005563617f2d88 in do_command (thd=0x7f3024000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:1352 #27 0x000055636197cc24 in do_handle_one_connection (connect=0x5563666f7ed0) at /home/mdbe/MDEV-21329/10.4/sql/sql_connect.cc:1412 #28 0x000055636197c973 in handle_one_connection (arg=0x5563666f7ed0) at /home/mdbe/MDEV-21329/10.4/sql/sql_connect.cc:1316 #29 0x00007f30c6e956db in start_thread (arg=0x7f30940ae700) at pthread_create.c:463 #30 0x00007f30c5923a3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95 10.4 79e32e47a1115 without rr 2020-09-29 16:21:06 0x7f2e00182700 InnoDB: Assertion failure in file /home/mdbe/MDEV-21329/10.4/storage/innobase/sync/sync0rw.cc line 252 InnoDB: Failing assertion: lock->lock_word == X_LOCK_DECR   #5 0x00007f2e159498b1 in __GI_abort () at abort.c:79 #6 0x000055cd30c3833a in ut_dbg_assertion_failed (expr=0x55cd313ab180 "lock->lock_word == X_LOCK_DECR", file=0x55cd313ab0f0 "/home/mdbe/MDEV-21329/10.4/storage/innobase/sync/sync0rw.cc", line=252) at /home/mdbe/MDEV-21329/10.4/storage/innobase/ut/ut0dbg.cc:60 #7 0x000055cd30bdf72b in rw_lock_free_func (lock=0x7f2d94298100) at /home/mdbe/MDEV-21329/10.4/storage/innobase/sync/sync0rw.cc:252 #8 0x000055cd30d93f7d in pfs_rw_lock_free_func (lock=0x7f2d94298100) at /home/mdbe/MDEV-21329/10.4/storage/innobase/include/sync0rw.ic:605 #9 0x000055cd30d99050 in fts_cache_destroy (cache=0x7f2d94298100) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0fts.cc:287 #10 0x000055cd30da42ce in fts_t::~fts_t (this=0x7f2d9445eea0, __in_chrg=<optimized out>) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0fts.cc:5317 #11 0x000055cd30da43ae in fts_free (table=0x7f2d98079aa0) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0fts.cc:5354 #12 0x000055cd30b5f319 in row_drop_ancillary_fts_tables (table=0x7f2d98079aa0, trx=0x7f2e00184140) at /home/mdbe/MDEV-21329/10.4/storage/innobase/row/row0mysql.cc:3241 #13 0x000055cd30b60681 in row_drop_table_for_mysql (name=0x7f2e0017d470 "test/#sql-7435_c", trx=0x7f2e00184140, sqlcom=SQLCOM_ALTER_TABLE, create_failed=false, nonatomic=true) at /home/mdbe/MDEV-21329/10.4/storage/innobase/row/row0mysql.cc:3692 #14 0x000055cd309d5190 in ha_innobase::delete_table (this=0x7f2d94015e50, name=0x7f2d942d9070 "./test/#sql-7435_c", sqlcom=SQLCOM_ALTER_TABLE) at /home/mdbe/MDEV-21329/10.4/storage/innobase/handler/ha_innodb.cc:13095 #15 0x000055cd309bd888 in ha_innobase::delete_table (this=0x7f2d94015e50, name=0x7f2d942d9070 "./test/#sql-7435_c") at /home/mdbe/MDEV-21329/10.4/storage/innobase/handler/ha_innodb.cc:13220 #16 0x000055cd3076cfc0 in handler::ha_delete_table (this=0x7f2d94015e50, name=0x7f2d942d9070 "./test/#sql-7435_c") at /home/mdbe/MDEV-21329/10.4/sql/handler.cc:4747 #17 0x000055cd3068fc33 in THD::rm_temporary_table (this=0x7f2d94000d50, base=0x55cd33b8fc10, path=0x7f2d942d9070 "./test/#sql-7435_c") at /home/mdbe/MDEV-21329/10.4/sql/temporary_tables.cc:701 #18 0x000055cd30691b37 in THD::free_tmp_table_share (this=0x7f2d94000d50, share=0x7f2d942d8ad0, delete_table=true) at /home/mdbe/MDEV-21329/10.4/sql/temporary_tables.cc:1462 #19 0x000055cd3068fa6b in THD::drop_temporary_table (this=0x7f2d94000d50, table=0x7f2d943980f0, is_trans=0x0, delete_table=true) at /home/mdbe/MDEV-21329/10.4/sql/temporary_tables.cc:664 #20 0x000055cd304f919c in mysql_alter_table (thd=0x7f2d94000d50, new_db=0x7f2d94005518, new_name=0x7f2d94005920, create_info=0x7f2e00180320, table_list=0x7f2d940142e0, alter_info=0x7f2e00180260, order_num=0, order=0x0, ignore=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_table.cc:10508 #21 0x000055cd30590202 in Sql_cmd_alter_table::execute (this=0x7f2d94014ad8, thd=0x7f2d94000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_alter.cc:514 #22 0x000055cd3040cbcb in mysql_execute_command (thd=0x7f2d94000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:6098 #23 0x000055cd304120ad in mysql_parse (thd=0x7f2d94000d50, rawbuf=0x7f2d94014198 "ALTER TABLE t1 CHANGE IF EXISTS b b INT, ALGORITHM=COPY /* QNO 46 CON_ID 12 */", length=78, parser_state=0x7f2e001815a0, is_com_multi=false, is_next_command=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:7896 #24 0x000055cd303fe5e7 in dispatch_command (command=COM_QUERY, thd=0x7f2d94000d50, packet=0x7f2d94008661 "ALTER TABLE t1 CHANGE IF EXISTS b b INT, ALGORITHM=COPY /* QNO 46 CON_ID 12 */ ", packet_length=79, is_com_multi=false, is_next_command=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:1834 #25 0x000055cd303fcd88 in do_command (thd=0x7f2d94000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:1352 #26 0x000055cd30586c24 in do_handle_one_connection (connect=0x55cd347d7c70) at /home/mdbe/MDEV-21329/10.4/sql/sql_connect.cc:1412 #27 0x000055cd30586973 in handle_one_connection (arg=0x55cd347d7c70) at /home/mdbe/MDEV-21329/10.4/sql/sql_connect.cc:1316 #28 0x00007f2e16f9c6db in start_thread (arg=0x7f2e00182700) at pthread_create.c:463 #29 0x00007f2e15a2aa3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
            elenst Elena Stepanova added a comment - - edited

            An rr profile for lock->lock_word == X_LOCK_DECR assertion failure has been produced on a custom build of 10.4 with the patch for MDEV-23856.

            10.4 79e32e47a + patch d6b33ea23

            (rr) bt
            #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
            #1  0x00006ffc0eb138b1 in __GI_abort () at abort.c:79
            #2  0x000055e15793133a in ut_dbg_assertion_failed (expr=0x55e1580a4180 "lock->lock_word == X_LOCK_DECR", file=0x55e1580a40f0 "/home/mdbe/MDEV-21329/10.4/storage/innobase/sync/sync0rw.cc", line=252)
                at /home/mdbe/MDEV-21329/10.4/storage/innobase/ut/ut0dbg.cc:60
            #3  0x000055e1578d872b in rw_lock_free_func (lock=0x7f501c083960) at /home/mdbe/MDEV-21329/10.4/storage/innobase/sync/sync0rw.cc:252
            #4  0x000055e157a8cf7d in pfs_rw_lock_free_func (lock=0x7f501c083960) at /home/mdbe/MDEV-21329/10.4/storage/innobase/include/sync0rw.ic:605
            #5  0x000055e157a92050 in fts_cache_destroy (cache=0x7f501c083960) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0fts.cc:287
            #6  0x000055e157a9d2ce in fts_t::~fts_t (this=0x35fb4c2a0b20, __in_chrg=<optimized out>) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0fts.cc:5317
            #7  0x000055e157a9d3ae in fts_free (table=0x35fb4c4ebaf0) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0fts.cc:5354
            #8  0x000055e157858319 in row_drop_ancillary_fts_tables (table=0x35fb4c4ebaf0, trx=0x361b3ec644b8) at /home/mdbe/MDEV-21329/10.4/storage/innobase/row/row0mysql.cc:3241
            #9  0x000055e157859681 in row_drop_table_for_mysql (name=0xe2b713b0470 "test/#sql-71af_d", trx=0x361b3ec644b8, sqlcom=SQLCOM_ALTER_TABLE, create_failed=false, nonatomic=true)
                at /home/mdbe/MDEV-21329/10.4/storage/innobase/row/row0mysql.cc:3692
            #10 0x000055e1576ce190 in ha_innobase::delete_table (this=0x7f501c013c90, name=0x7f501c04dbb0 "./test/#sql-71af_d", sqlcom=SQLCOM_ALTER_TABLE) at /home/mdbe/MDEV-21329/10.4/storage/innobase/handler/ha_innodb.cc:13095
            #11 0x000055e1576b6888 in ha_innobase::delete_table (this=0x7f501c013c90, name=0x7f501c04dbb0 "./test/#sql-71af_d") at /home/mdbe/MDEV-21329/10.4/storage/innobase/handler/ha_innodb.cc:13220
            #12 0x000055e157465fc0 in handler::ha_delete_table (this=0x7f501c013c90, name=0x7f501c04dbb0 "./test/#sql-71af_d") at /home/mdbe/MDEV-21329/10.4/sql/handler.cc:4747
            #13 0x000055e157388c33 in THD::rm_temporary_table (this=0x7f501c000d50, base=0x55e159c56be0, path=0x7f501c04dbb0 "./test/#sql-71af_d") at /home/mdbe/MDEV-21329/10.4/sql/temporary_tables.cc:701
            #14 0x000055e15738ab37 in THD::free_tmp_table_share (this=0x7f501c000d50, share=0x7f501c04d610, delete_table=true) at /home/mdbe/MDEV-21329/10.4/sql/temporary_tables.cc:1462
            #15 0x000055e157388a6b in THD::drop_temporary_table (this=0x7f501c000d50, table=0x7f501c08f090, is_trans=0x0, delete_table=true) at /home/mdbe/MDEV-21329/10.4/sql/temporary_tables.cc:664
            #16 0x000055e1571f219c in mysql_alter_table (thd=0x7f501c000d50, new_db=0x7f501c005518, new_name=0x7f501c005920, create_info=0xe2b713b3320, table_list=0x7f501c012120, alter_info=0xe2b713b3260, order_num=0, order=0x0, ignore=false)
                at /home/mdbe/MDEV-21329/10.4/sql/sql_table.cc:10508
            #17 0x000055e157289202 in Sql_cmd_alter_table::execute (this=0x7f501c012918, thd=0x7f501c000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_alter.cc:514
            #18 0x000055e157105bcb in mysql_execute_command (thd=0x7f501c000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:6098
            #19 0x000055e15710b0ad in mysql_parse (thd=0x7f501c000d50, rawbuf=0x7f501c011fd8 "ALTER TABLE t1 CHANGE IF EXISTS b a INT, ALGORITHM=COPY /* QNO 49 CON_ID 13 */", length=78, parser_state=0xe2b713b45a0, is_com_multi=false, 
                is_next_command=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:7896
            #20 0x000055e1570f75e7 in dispatch_command (command=COM_QUERY, thd=0x7f501c000d50, packet=0x7f501c008661 "ALTER TABLE t1 CHANGE IF EXISTS b a INT, ALGORITHM=COPY /* QNO 49 CON_ID 13 */ ", packet_length=79, is_com_multi=false, 
                is_next_command=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:1834
            #21 0x000055e1570f5d88 in do_command (thd=0x7f501c000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:1352
            #22 0x000055e15727fc24 in do_handle_one_connection (connect=0x55e15a7d5a90) at /home/mdbe/MDEV-21329/10.4/sql/sql_connect.cc:1412
            #23 0x000055e15727f973 in handle_one_connection (arg=0x55e15a7d5a90) at /home/mdbe/MDEV-21329/10.4/sql/sql_connect.cc:1316
            #24 0x000063347ac7f6db in start_thread (arg=0xe2b713b5700) at pthread_create.c:463
            #25 0x00006ffc0ebf4a3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
            

            elenst Elena Stepanova added a comment - - edited An rr profile for lock->lock_word == X_LOCK_DECR assertion failure has been produced on a custom build of 10.4 with the patch for MDEV-23856 . 10.4 79e32e47a + patch d6b33ea23 (rr) bt #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 #1 0x00006ffc0eb138b1 in __GI_abort () at abort.c:79 #2 0x000055e15793133a in ut_dbg_assertion_failed (expr=0x55e1580a4180 "lock->lock_word == X_LOCK_DECR", file=0x55e1580a40f0 "/home/mdbe/MDEV-21329/10.4/storage/innobase/sync/sync0rw.cc", line=252) at /home/mdbe/MDEV-21329/10.4/storage/innobase/ut/ut0dbg.cc:60 #3 0x000055e1578d872b in rw_lock_free_func (lock=0x7f501c083960) at /home/mdbe/MDEV-21329/10.4/storage/innobase/sync/sync0rw.cc:252 #4 0x000055e157a8cf7d in pfs_rw_lock_free_func (lock=0x7f501c083960) at /home/mdbe/MDEV-21329/10.4/storage/innobase/include/sync0rw.ic:605 #5 0x000055e157a92050 in fts_cache_destroy (cache=0x7f501c083960) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0fts.cc:287 #6 0x000055e157a9d2ce in fts_t::~fts_t (this=0x35fb4c2a0b20, __in_chrg=<optimized out>) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0fts.cc:5317 #7 0x000055e157a9d3ae in fts_free (table=0x35fb4c4ebaf0) at /home/mdbe/MDEV-21329/10.4/storage/innobase/fts/fts0fts.cc:5354 #8 0x000055e157858319 in row_drop_ancillary_fts_tables (table=0x35fb4c4ebaf0, trx=0x361b3ec644b8) at /home/mdbe/MDEV-21329/10.4/storage/innobase/row/row0mysql.cc:3241 #9 0x000055e157859681 in row_drop_table_for_mysql (name=0xe2b713b0470 "test/#sql-71af_d", trx=0x361b3ec644b8, sqlcom=SQLCOM_ALTER_TABLE, create_failed=false, nonatomic=true) at /home/mdbe/MDEV-21329/10.4/storage/innobase/row/row0mysql.cc:3692 #10 0x000055e1576ce190 in ha_innobase::delete_table (this=0x7f501c013c90, name=0x7f501c04dbb0 "./test/#sql-71af_d", sqlcom=SQLCOM_ALTER_TABLE) at /home/mdbe/MDEV-21329/10.4/storage/innobase/handler/ha_innodb.cc:13095 #11 0x000055e1576b6888 in ha_innobase::delete_table (this=0x7f501c013c90, name=0x7f501c04dbb0 "./test/#sql-71af_d") at /home/mdbe/MDEV-21329/10.4/storage/innobase/handler/ha_innodb.cc:13220 #12 0x000055e157465fc0 in handler::ha_delete_table (this=0x7f501c013c90, name=0x7f501c04dbb0 "./test/#sql-71af_d") at /home/mdbe/MDEV-21329/10.4/sql/handler.cc:4747 #13 0x000055e157388c33 in THD::rm_temporary_table (this=0x7f501c000d50, base=0x55e159c56be0, path=0x7f501c04dbb0 "./test/#sql-71af_d") at /home/mdbe/MDEV-21329/10.4/sql/temporary_tables.cc:701 #14 0x000055e15738ab37 in THD::free_tmp_table_share (this=0x7f501c000d50, share=0x7f501c04d610, delete_table=true) at /home/mdbe/MDEV-21329/10.4/sql/temporary_tables.cc:1462 #15 0x000055e157388a6b in THD::drop_temporary_table (this=0x7f501c000d50, table=0x7f501c08f090, is_trans=0x0, delete_table=true) at /home/mdbe/MDEV-21329/10.4/sql/temporary_tables.cc:664 #16 0x000055e1571f219c in mysql_alter_table (thd=0x7f501c000d50, new_db=0x7f501c005518, new_name=0x7f501c005920, create_info=0xe2b713b3320, table_list=0x7f501c012120, alter_info=0xe2b713b3260, order_num=0, order=0x0, ignore=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_table.cc:10508 #17 0x000055e157289202 in Sql_cmd_alter_table::execute (this=0x7f501c012918, thd=0x7f501c000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_alter.cc:514 #18 0x000055e157105bcb in mysql_execute_command (thd=0x7f501c000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:6098 #19 0x000055e15710b0ad in mysql_parse (thd=0x7f501c000d50, rawbuf=0x7f501c011fd8 "ALTER TABLE t1 CHANGE IF EXISTS b a INT, ALGORITHM=COPY /* QNO 49 CON_ID 13 */", length=78, parser_state=0xe2b713b45a0, is_com_multi=false, is_next_command=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:7896 #20 0x000055e1570f75e7 in dispatch_command (command=COM_QUERY, thd=0x7f501c000d50, packet=0x7f501c008661 "ALTER TABLE t1 CHANGE IF EXISTS b a INT, ALGORITHM=COPY /* QNO 49 CON_ID 13 */ ", packet_length=79, is_com_multi=false, is_next_command=false) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:1834 #21 0x000055e1570f5d88 in do_command (thd=0x7f501c000d50) at /home/mdbe/MDEV-21329/10.4/sql/sql_parse.cc:1352 #22 0x000055e15727fc24 in do_handle_one_connection (connect=0x55e15a7d5a90) at /home/mdbe/MDEV-21329/10.4/sql/sql_connect.cc:1412 #23 0x000055e15727f973 in handle_one_connection (arg=0x55e15a7d5a90) at /home/mdbe/MDEV-21329/10.4/sql/sql_connect.cc:1316 #24 0x000063347ac7f6db in start_thread (arg=0xe2b713b5700) at pthread_create.c:463 #25 0x00006ffc0ebf4a3f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

            The change looks OK to me. Are 10.0 and 10.1 really not affected? We might lack this debug assertion, but shouldn’t the double-free issue be possible there as well?

            Please make it clear in the commit message that fts_optimize_remove_table() is executed by a user thread that performs DDL, and that the fts_optimize_wq may be removed if fts_optimize_shutdown() has started executing.

            It appears that the assignment to set the flag fts_opt_start_shutdown is protected by dict_sys.mutex in fts_optimize_shutdown(). But we are reading that flag without holding any mutex. Is fts_optimize_remove_table() missing a mutex_own() assertion?

            If we are really not holding the dict_system.mutex when we are reading the flag, then I would suggest that in the 10.4 version you change the flag declaration to

            static std::atomic<bool> fts_opt_start_shutdown;
            

            and change all reads to use explicit

            if (fts_opt_start_shutdown.load(std::memory_order_consume))
            

            and the assignment to be done without acquiring any extra mutex:

            fts_opt_start_shutdown.store(true, std::memory_order_release);
            

            I believe that we would want Release-Consume ordering here.

            I would rewrite this logic in MDEV-21452 later to use condition variables instead of a polling loop.

            marko Marko Mäkelä added a comment - The change looks OK to me. Are 10.0 and 10.1 really not affected? We might lack this debug assertion, but shouldn’t the double-free issue be possible there as well? Please make it clear in the commit message that fts_optimize_remove_table() is executed by a user thread that performs DDL, and that the fts_optimize_wq may be removed if fts_optimize_shutdown() has started executing. It appears that the assignment to set the flag fts_opt_start_shutdown is protected by dict_sys.mutex in fts_optimize_shutdown() . But we are reading that flag without holding any mutex. Is fts_optimize_remove_table() missing a mutex_own() assertion? If we are really not holding the dict_system.mutex when we are reading the flag, then I would suggest that in the 10.4 version you change the flag declaration to static std::atomic< bool > fts_opt_start_shutdown; and change all reads to use explicit if (fts_opt_start_shutdown.load(std::memory_order_consume)) and the assignment to be done without acquiring any extra mutex: fts_opt_start_shutdown.store( true , std::memory_order_release); I believe that we would want Release-Consume ordering here. I would rewrite this logic in MDEV-21452 later to use condition variables instead of a polling loop.

            Sorry, I missed the note in the page that I linked to:

            The specification of release-consume ordering is being revised, and the use of memory_order_consume is temporarily discouraged.

            It seems to refer to P0371R1, which states:

            All current compilers essentially map it to memory_order_acquire.

            marko Marko Mäkelä added a comment - Sorry, I missed the note in the page that I linked to: The specification of release-consume ordering is being revised, and the use of memory_order_consume is temporarily discouraged. It seems to refer to P0371R1 , which states: All current compilers essentially map it to memory_order_acquire .

            fts_opt_start_shutdown is being read without any mutex protection in fts_optimize_remove_table().

            thiru Thirunarayanan Balathandayuthapani added a comment - fts_opt_start_shutdown is being read without any mutex protection in fts_optimize_remove_table() .

            People

              thiru Thirunarayanan Balathandayuthapani
              elenst Elena Stepanova
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.