mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
Critical fixes after review:
- mutex was unlocked before the end of the critical sesion, - Portability issue: It's better to use (*alloc)(x) instead of alloc(x), if alloc is a function passed as an argument. - Use {} around if() block, to avoid possible problems with some Windows compilers.
This commit is contained in:
parent
7f7c311b73
commit
1efa7ea50f
3 changed files with 10 additions and 8 deletions
|
@ -469,7 +469,6 @@ static CHARSET_INFO *get_internal_charset(uint cs_number, myf flags)
|
|||
}
|
||||
cs= (cs->state & MY_CS_AVAILABLE) ? cs : NULL;
|
||||
}
|
||||
pthread_mutex_unlock(&THR_LOCK_charset);
|
||||
if (cs && !(cs->state & MY_CS_READY))
|
||||
{
|
||||
if ((cs->cset->init && cs->cset->init(cs, cs_alloc)) ||
|
||||
|
@ -478,6 +477,7 @@ static CHARSET_INFO *get_internal_charset(uint cs_number, myf flags)
|
|||
else
|
||||
cs->state|= MY_CS_READY;
|
||||
}
|
||||
pthread_mutex_unlock(&THR_LOCK_charset);
|
||||
return cs;
|
||||
}
|
||||
|
||||
|
|
|
@ -370,7 +370,7 @@ bool String::copy(const char *str, uint32 arg_length,
|
|||
|
||||
bool String::set_ascii(const char *str, uint32 arg_length)
|
||||
{
|
||||
if (!(str_charset->mbminlen > 1))
|
||||
if (str_charset->mbminlen == 1)
|
||||
{
|
||||
set(str, arg_length, str_charset);
|
||||
return 0;
|
||||
|
|
|
@ -7549,8 +7549,8 @@ typedef struct my_coll_rule_item_st
|
|||
USAGE
|
||||
|
||||
RETURN VALUES
|
||||
0 - OK
|
||||
1 - ERROR, e.g. too many items.
|
||||
A positive number means the number of rules loaded.
|
||||
-1 means ERROR, e.g. too many items, syntax error, etc.
|
||||
*/
|
||||
|
||||
static int my_coll_rule_parse(MY_COLL_RULE *rule, size_t mitems,
|
||||
|
@ -7706,11 +7706,11 @@ static my_bool create_tailoring(CHARSET_INFO *cs, void *(*alloc)(uint))
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (!(newweights= (uint16**) alloc(256*sizeof(uint16*))))
|
||||
if (!(newweights= (uint16**) (*alloc)(256*sizeof(uint16*))))
|
||||
return 1;
|
||||
bzero(newweights, 256*sizeof(uint16*));
|
||||
|
||||
if (!(newlengths= (uchar*) alloc(256)))
|
||||
if (!(newlengths= (uchar*) (*alloc)(256)))
|
||||
return 1;
|
||||
|
||||
memcpy(newlengths, deflengths, 256);
|
||||
|
@ -7747,7 +7747,7 @@ static my_bool create_tailoring(CHARSET_INFO *cs, void *(*alloc)(uint))
|
|||
/* Alloc new page and copy the default UCA weights */
|
||||
uint size= 256*newlengths[pagec]*sizeof(uint16);
|
||||
|
||||
if (!(newweights[pagec]= (uint16*) alloc(size)))
|
||||
if (!(newweights[pagec]= (uint16*) (*alloc)(size)))
|
||||
return 1;
|
||||
bzero((void*) newweights[pagec], size);
|
||||
|
||||
|
@ -7774,8 +7774,10 @@ static my_bool create_tailoring(CHARSET_INFO *cs, void *(*alloc)(uint))
|
|||
|
||||
/* Copy non-overwritten pages from the default UCA weights */
|
||||
for (i= 0; i < 256 ; i++)
|
||||
{
|
||||
if (!newweights[i])
|
||||
newweights[i]= defweights[i];
|
||||
}
|
||||
|
||||
cs->sort_order= newlengths;
|
||||
cs->sort_order_big= newweights;
|
||||
|
@ -7785,7 +7787,7 @@ static my_bool create_tailoring(CHARSET_INFO *cs, void *(*alloc)(uint))
|
|||
if (ncontractions)
|
||||
{
|
||||
uint size= 0x40*0x40*sizeof(uint16); /* 8K, for basic latin letter only */
|
||||
if (!(cs->contractions= (uint16*) alloc(size)))
|
||||
if (!(cs->contractions= (uint16*) (*alloc)(size)))
|
||||
return 1;
|
||||
bzero((void*)cs->contractions, size);
|
||||
for (i=0; i < rc; i++)
|
||||
|
|
Loading…
Add table
Reference in a new issue