• Sven Sandberg's avatar
    BUG#54729: sleep() capped to 5 seconds when executed in the sql thread or in an event · afde22b0
    Sven Sandberg authored
    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.
    
    
    sql/sql_class.h:
      Made THD::is_connected() return true for all system threads.
    afde22b0
sql_class.h 119 KB