From f814d224f72063e5acc4084e46db485e7d4b9b02 Mon Sep 17 00:00:00 2001 From: "bar@mysql.com" <> Date: Wed, 16 Jun 2004 19:06:45 +0500 Subject: [PATCH] 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. --- mysys/charset.c | 2 +- sql/sql_string.cc | 2 +- strings/ctype-uca.c | 14 ++++++++------ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/mysys/charset.c b/mysys/charset.c index 72f102a2296..1388fc40c6d 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -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; } diff --git a/sql/sql_string.cc b/sql/sql_string.cc index cf4f94ba966..1ec0faafa8f 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -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; diff --git a/strings/ctype-uca.c b/strings/ctype-uca.c index 67214d31ed9..2e03bc8718e 100644 --- a/strings/ctype-uca.c +++ b/strings/ctype-uca.c @@ -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++)