diff options
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/getvar.c | 18 | ||||
-rw-r--r-- | mysys/thr_lock.c | 2 |
2 files changed, 9 insertions, 11 deletions
diff --git a/mysys/getvar.c b/mysys/getvar.c index 21cac7f0d61..703ccc4ddfa 100644 --- a/mysys/getvar.c +++ b/mysys/getvar.c @@ -56,7 +56,7 @@ my_bool set_changeable_var(my_string str,CHANGEABLE_VAR *vars) CHANGEABLE_VAR *var,*found; my_string var_end; const char *name; - long num; + longlong num; /* Skip end space from variable */ for (var_end=end ; end > str && isspace(var_end[-1]) ; var_end--) ; @@ -87,7 +87,7 @@ my_bool set_changeable_var(my_string str,CHANGEABLE_VAR *vars) DBUG_RETURN(1); } - num=(long) atol(end); endchar=strend(end)[-1]; + num=atoll(end); endchar=strend(end)[-1]; if (endchar == 'k' || endchar == 'K') num*=1024; else if (endchar == 'm' || endchar == 'M') @@ -99,14 +99,12 @@ my_bool set_changeable_var(my_string str,CHANGEABLE_VAR *vars) fprintf(stderr,"Unknown prefix used for variable value '%s'\n",str); DBUG_RETURN(1); } - if (num < (long) found->min_value) - num=(long) found->min_value; - else if ((unsigned long) num > - (unsigned long) found->max_value) - num=(long) found->max_value; - *found->varptr=(long) ((ulong) (num-found->sub_size) / - (ulong) found->block_size); - (*found->varptr)*= (ulong) found->block_size; + if (num < (longlong) found->min_value) + num=(longlong) found->min_value; + else if (num > (longlong) (ulong) found->max_value) + num=(longlong) (ulong) found->max_value; + num=((num- (longlong) found->sub_size) / (ulonglong) found->block_size); + (*found->varptr)= (long) (num*(ulonglong) found->block_size); DBUG_RETURN(0); } } diff --git a/mysys/thr_lock.c b/mysys/thr_lock.c index ed21d466b35..74548b7fa12 100644 --- a/mysys/thr_lock.c +++ b/mysys/thr_lock.c @@ -370,7 +370,7 @@ static my_bool wait_for_lock(struct st_lock_list *wait, THR_LOCK_DATA *data, do { pthread_cond_wait(cond,&data->lock->mutex); - } while (data->cond == cond && !thread_var->abort); + } while (data->cond == cond && (!thread_var->abort || in_wait_list)); if (data->cond || data->type == TL_UNLOCK) { |