diff options
author | unknown <monty@narttu.mysql.fi> | 2003-03-10 12:00:19 +0200 |
---|---|---|
committer | unknown <monty@narttu.mysql.fi> | 2003-03-10 12:00:19 +0200 |
commit | 66e8db8241bfcad048d08fa1a24532fae8ee5f0a (patch) | |
tree | 2a98237c202bf25f13398e06acba38f5605b6c60 | |
parent | 065bedc5d45fbce52c55feb2c8cc2223652e3d37 (diff) | |
download | mariadb-git-66e8db8241bfcad048d08fa1a24532fae8ee5f0a.tar.gz |
Fix that round(0.1,1) == round(0.1,1)
sql/slave.cc:
Fixed problem with --debug output in handle_slave
-rw-r--r-- | sql/item_func.cc | 18 | ||||
-rw-r--r-- | sql/slave.cc | 7 |
2 files changed, 17 insertions, 8 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc index ef629098d2a..d5b7869cbcb 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -679,20 +679,28 @@ double Item_func_round::val() double value=args[0]->val(); int dec=(int) args[1]->val_int(); uint abs_dec=abs(dec); + double tmp; + /* + tmp2 is here to avoid return the value with 80 bit precision + This will fix that the test round(0.1,1) = round(0.1,1) is true + */ + volatile double tmp2; if ((null_value=args[0]->null_value || args[1]->null_value)) return 0.0; - double tmp=(abs_dec < array_elements(log_10) ? - log_10[abs_dec] : pow(10.0,(double) abs_dec)); + tmp=(abs_dec < array_elements(log_10) ? + log_10[abs_dec] : pow(10.0,(double) abs_dec)); if (truncate) { if (value >= 0) - return dec < 0 ? floor(value/tmp)*tmp : floor(value*tmp)/tmp; + tmp2= dec < 0 ? floor(value/tmp)*tmp : floor(value*tmp)/tmp; else - return dec < 0 ? ceil(value/tmp)*tmp : ceil(value*tmp)/tmp; + tmp2= dec < 0 ? ceil(value/tmp)*tmp : ceil(value*tmp)/tmp; } - return dec < 0 ? rint(value/tmp)*tmp : rint(value*tmp)/tmp; + else + tmp2=dec < 0 ? rint(value/tmp)*tmp : rint(value*tmp)/tmp; + return tmp2; } diff --git a/sql/slave.cc b/sql/slave.cc index 4d08fcbbd5a..0699029d69e 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -1815,7 +1815,8 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type) if (init_thr_lock() || thd->store_globals()) { - end_thread(thd,0); + thd->cleanup(); + delete thd; DBUG_RETURN(-1); } @@ -2096,6 +2097,7 @@ extern "C" pthread_handler_decl(handle_slave_io,arg) // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff my_thread_init(); + DBUG_ENTER("handle_slave_io"); #ifndef DBUG_OFF slave_begin: @@ -2113,7 +2115,6 @@ slave_begin: #endif thd= new THD; // note that contructor of THD uses DBUG_ ! - DBUG_ENTER("handle_slave_io"); THD_CHECK_SENTRY(thd); pthread_detach_this_thread(); @@ -2370,6 +2371,7 @@ extern "C" pthread_handler_decl(handle_slave_sql,arg) // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff my_thread_init(); + DBUG_ENTER("handle_slave_sql"); #ifndef DBUG_OFF slave_begin: @@ -2382,7 +2384,6 @@ slave_begin: #ifndef DBUG_OFF rli->events_till_abort = abort_slave_event_count; #endif - DBUG_ENTER("handle_slave_sql"); thd = new THD; // note that contructor of THD uses DBUG_ ! THD_CHECK_SENTRY(thd); |