summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@narttu.mysql.fi>2003-03-10 12:00:19 +0200
committerunknown <monty@narttu.mysql.fi>2003-03-10 12:00:19 +0200
commit66e8db8241bfcad048d08fa1a24532fae8ee5f0a (patch)
tree2a98237c202bf25f13398e06acba38f5605b6c60
parent065bedc5d45fbce52c55feb2c8cc2223652e3d37 (diff)
downloadmariadb-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.cc18
-rw-r--r--sql/slave.cc7
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);