mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
BUG#54729: sleep() capped to 5 seconds when executed in the sql thread or in an event
Symptom: When the sql function SLEEP() was executed in the slave SQL thread or from an event (as in CREATE EVENT, not binlog event), then the timeout was capped to 5 seconds. Background: This bug was introduced in the fix of BUG#10374, in the function interruptible_wait() in item_func.cc. The function interruptible_wait(), called from item_func_sleep::val_int(), splits the sleep into 5 seconds units. After each unit, it checks if thd->is_connected() is true: if not, it stops sleeping. The purpose is to not use system resources to sleep when a client disconnects. However, thd->is_connected() returns false for the slave SQL thread and for the event worker thread, because they don't connect to the server the same way as client threads do. Fix: Make thd->is_connected() return true for all system threads.
This commit is contained in:
parent
465e4025f7
commit
7c3670294b
1 changed files with 6 additions and 1 deletions
|
@ -2459,7 +2459,12 @@ public:
|
|||
/** Return FALSE if connection to client is broken. */
|
||||
bool is_connected()
|
||||
{
|
||||
return vio_ok() ? vio_is_connected(net.vio) : FALSE;
|
||||
/*
|
||||
All system threads (e.g., the slave IO thread) are connected but
|
||||
not using vio. So this function always returns true for all
|
||||
system threads.
|
||||
*/
|
||||
return system_thread || (vio_ok() ? vio_is_connected(net.vio) : FALSE);
|
||||
}
|
||||
#else
|
||||
inline bool vio_ok() const { return TRUE; }
|
||||
|
|
Loading…
Reference in a new issue