debug-only issue. the test was doing
set debug_sync='now SIGNAL go3';
...
set debug_sync='reset';
which translated into
add "go3" to the hash of active signals
pthread_broadcast to wake up waiting threads
...
clear the hash of active signals
as a result a waiting thread was awoken, but the hash was emptied
before the thread checked if its signal was in the hash. so the
thread didn't find its signal and went back to sleep.
let's wait until the awoken thread has completely finished
disconnecting and was added to the thread cache.
This is a 10.5 version of 9b750dcbd8, fix for
MDEV-23536 Race condition between KILL and transaction commit
InnoDB needs to remove trx from thd before destroying it (trx), otherwise
a concurrent KILL might get a pointer from thd to a destroyed trx.
ha_close_connection() should allow engines to clear ha_data in
hton->on close_connection(). To prevent the engine from being unloaded
while hton->close_connection() is running, we remove the lock from
ha_data and unlock the plugin manually.