Loading sql/ha_ndbcluster.cc +2 −1 Original line number Diff line number Diff line Loading @@ -1423,7 +1423,8 @@ int ha_ndbcluster::write_row(byte *record) { Uint64 next_val= (Uint64) table->next_number_field->val_int() + 1; DBUG_PRINT("info", ("Trying to set next auto increment value to %u", next_val)); ("Trying to set next auto increment value to %lu", (ulong) next_val)); if (m_ndb->setAutoIncrementValue((NDBTAB *) m_table, next_val, true)) DBUG_PRINT("info", ("Setting next auto increment value to %u", next_val)); Loading sql/item.cc +1 −1 Original line number Diff line number Diff line Loading @@ -919,7 +919,7 @@ double Item_param::val() This works for example when user says SELECT ?+0.0 and supplies time value for the placeholder. */ return (double) TIME_to_ulonglong(&value.time); return ulonglong2double(TIME_to_ulonglong(&value.time)); case NULL_VALUE: return 0.0; default: Loading sql/lock.cc +6 −2 Original line number Diff line number Diff line Loading @@ -787,7 +787,7 @@ bool wait_if_global_read_lock(THD *thd, bool abort_on_refresh, bool is_not_commi LINT_INIT(old_message); (void) pthread_mutex_lock(&LOCK_open); if (need_exit_cond= must_wait) if ((need_exit_cond= must_wait)) { if (thd->global_read_lock) // This thread had the read locks { Loading @@ -805,7 +805,11 @@ bool wait_if_global_read_lock(THD *thd, bool abort_on_refresh, bool is_not_commi } if (!abort_on_refresh && !result) protect_against_global_read_lock++; if (unlikely(need_exit_cond)) // global read locks are rare /* The following is only true in case of a global read locks (which is rare) and if old_message is set */ if (unlikely(need_exit_cond)) thd->exit_cond(old_message); else pthread_mutex_unlock(&LOCK_open); Loading sql/sql_class.cc +12 −7 Original line number Diff line number Diff line Loading @@ -155,11 +155,13 @@ bool foreign_key_prefix(Key *a, Key *b) ** Thread specific functions ****************************************************************************/ THD::THD():user_time(0), current_arena(this), is_fatal_error(0), THD::THD() :user_time(0), global_read_lock(0), is_fatal_error(0), last_insert_id_used(0), insert_id_used(0), rand_used(0), time_zone_used(0), in_lock_tables(0), global_read_lock(0), bootstrap(0) in_lock_tables(0), bootstrap(0) { current_arena= this; host= user= priv_user= db= ip=0; host_or_ip= "connecting host"; locked=some_tables_deleted=no_errors=password= 0; Loading Loading @@ -439,10 +441,13 @@ void THD::awake(bool prepare_to_die) it is the true value but maybe current_mutex is not yet non-zero (we're in the middle of enter_cond() and there is a "memory order inversion"). So we test the mutex too to not lock 0. Note that there is a small chance we fail to kill. If victim has locked current_mutex, and hasn't entered enter_cond(), then we don't know it's going to wait on cond. Then victim goes into its cond "forever" (until we issue a second KILL). True we have set its thd->killed but it may not current_mutex, but hasn't yet entered enter_cond() (which means that current_cond and current_mutex are 0), then the victim will not get a signal and it may wait "forever" on the cond (until we issue a second KILL or the status it's waiting for happens). It's true that we have set its thd->killed but it may not see it immediately and so may have time to reach the cond_wait(). */ if (mysys_var->current_cond && mysys_var->current_mutex) Loading sql/sql_select.cc +1 −1 Original line number Diff line number Diff line Loading @@ -8014,7 +8014,7 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, Item *itemptr=*order->item; if (itemptr->type() == Item::INT_ITEM) { /* Order by position */ uint count= itemptr->val_int(); uint count= (uint) itemptr->val_int(); if (!count || count > fields.elements) { my_printf_error(ER_BAD_FIELD_ERROR,ER(ER_BAD_FIELD_ERROR), Loading Loading
sql/ha_ndbcluster.cc +2 −1 Original line number Diff line number Diff line Loading @@ -1423,7 +1423,8 @@ int ha_ndbcluster::write_row(byte *record) { Uint64 next_val= (Uint64) table->next_number_field->val_int() + 1; DBUG_PRINT("info", ("Trying to set next auto increment value to %u", next_val)); ("Trying to set next auto increment value to %lu", (ulong) next_val)); if (m_ndb->setAutoIncrementValue((NDBTAB *) m_table, next_val, true)) DBUG_PRINT("info", ("Setting next auto increment value to %u", next_val)); Loading
sql/item.cc +1 −1 Original line number Diff line number Diff line Loading @@ -919,7 +919,7 @@ double Item_param::val() This works for example when user says SELECT ?+0.0 and supplies time value for the placeholder. */ return (double) TIME_to_ulonglong(&value.time); return ulonglong2double(TIME_to_ulonglong(&value.time)); case NULL_VALUE: return 0.0; default: Loading
sql/lock.cc +6 −2 Original line number Diff line number Diff line Loading @@ -787,7 +787,7 @@ bool wait_if_global_read_lock(THD *thd, bool abort_on_refresh, bool is_not_commi LINT_INIT(old_message); (void) pthread_mutex_lock(&LOCK_open); if (need_exit_cond= must_wait) if ((need_exit_cond= must_wait)) { if (thd->global_read_lock) // This thread had the read locks { Loading @@ -805,7 +805,11 @@ bool wait_if_global_read_lock(THD *thd, bool abort_on_refresh, bool is_not_commi } if (!abort_on_refresh && !result) protect_against_global_read_lock++; if (unlikely(need_exit_cond)) // global read locks are rare /* The following is only true in case of a global read locks (which is rare) and if old_message is set */ if (unlikely(need_exit_cond)) thd->exit_cond(old_message); else pthread_mutex_unlock(&LOCK_open); Loading
sql/sql_class.cc +12 −7 Original line number Diff line number Diff line Loading @@ -155,11 +155,13 @@ bool foreign_key_prefix(Key *a, Key *b) ** Thread specific functions ****************************************************************************/ THD::THD():user_time(0), current_arena(this), is_fatal_error(0), THD::THD() :user_time(0), global_read_lock(0), is_fatal_error(0), last_insert_id_used(0), insert_id_used(0), rand_used(0), time_zone_used(0), in_lock_tables(0), global_read_lock(0), bootstrap(0) in_lock_tables(0), bootstrap(0) { current_arena= this; host= user= priv_user= db= ip=0; host_or_ip= "connecting host"; locked=some_tables_deleted=no_errors=password= 0; Loading Loading @@ -439,10 +441,13 @@ void THD::awake(bool prepare_to_die) it is the true value but maybe current_mutex is not yet non-zero (we're in the middle of enter_cond() and there is a "memory order inversion"). So we test the mutex too to not lock 0. Note that there is a small chance we fail to kill. If victim has locked current_mutex, and hasn't entered enter_cond(), then we don't know it's going to wait on cond. Then victim goes into its cond "forever" (until we issue a second KILL). True we have set its thd->killed but it may not current_mutex, but hasn't yet entered enter_cond() (which means that current_cond and current_mutex are 0), then the victim will not get a signal and it may wait "forever" on the cond (until we issue a second KILL or the status it's waiting for happens). It's true that we have set its thd->killed but it may not see it immediately and so may have time to reach the cond_wait(). */ if (mysys_var->current_cond && mysys_var->current_mutex) Loading
sql/sql_select.cc +1 −1 Original line number Diff line number Diff line Loading @@ -8014,7 +8014,7 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, Item *itemptr=*order->item; if (itemptr->type() == Item::INT_ITEM) { /* Order by position */ uint count= itemptr->val_int(); uint count= (uint) itemptr->val_int(); if (!count || count > fields.elements) { my_printf_error(ER_BAD_FIELD_ERROR,ER(ER_BAD_FIELD_ERROR), Loading