mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
MDEV-5181 incorrect binary search in remove_status_vars()
The loop in the binary search in remove_status_vars() was incorrectly implemented and could continue infinitely in some cases. Rewrote the binary search code.
This commit is contained in:
parent
11d141004a
commit
a4dc526fc7
1 changed files with 9 additions and 8 deletions
|
@ -2202,19 +2202,20 @@ void remove_status_vars(SHOW_VAR *list)
|
|||
|
||||
for (; list->name; list++)
|
||||
{
|
||||
int res= 0, a= 0, b= all_status_vars.elements, c= (a+b)/2;
|
||||
for (; b-a > 0; c= (a+b)/2)
|
||||
int first= 0, last= ((int) all_status_vars.elements) - 1;
|
||||
for ( ; first <= last; )
|
||||
{
|
||||
res= show_var_cmp(list, all+c);
|
||||
if (res < 0)
|
||||
b= c;
|
||||
int res, middle= (first + last) / 2;
|
||||
if ((res= show_var_cmp(list, all + middle)) < 0)
|
||||
last= middle - 1;
|
||||
else if (res > 0)
|
||||
a= c;
|
||||
first= middle + 1;
|
||||
else
|
||||
{
|
||||
all[middle].type= SHOW_UNDEF;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (res == 0)
|
||||
all[c].type= SHOW_UNDEF;
|
||||
}
|
||||
shrink_var_array(&all_status_vars);
|
||||
pthread_mutex_unlock(&LOCK_status);
|
||||
|
|
Loading…
Reference in a new issue