mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
charset.c:
Bug#12109 possible locking bug in init_available_charset Recheck charset_initialized inside locked code, to garantee two threads are not entering consequently. mysys/charset.c: Bug#12109 possible locking bug in init_available_charset Recheck charset_initialized inside locked code, to garantee two threads are not entering consequently.
This commit is contained in:
parent
bdc0c67195
commit
a6b225ba8d
1 changed files with 18 additions and 16 deletions
|
@ -383,26 +383,28 @@ static my_bool init_available_charsets(myf myflags)
|
|||
while we may changing the cs_info_table
|
||||
*/
|
||||
pthread_mutex_lock(&THR_LOCK_charset);
|
||||
|
||||
bzero(&all_charsets,sizeof(all_charsets));
|
||||
init_compiled_charsets(myflags);
|
||||
|
||||
/* Copy compiled charsets */
|
||||
for (cs=all_charsets;
|
||||
cs < all_charsets+array_elements(all_charsets)-1 ;
|
||||
cs++)
|
||||
if (!charset_initialized)
|
||||
{
|
||||
if (*cs)
|
||||
bzero(&all_charsets,sizeof(all_charsets));
|
||||
init_compiled_charsets(myflags);
|
||||
|
||||
/* Copy compiled charsets */
|
||||
for (cs=all_charsets;
|
||||
cs < all_charsets+array_elements(all_charsets)-1 ;
|
||||
cs++)
|
||||
{
|
||||
if (cs[0]->ctype)
|
||||
if (init_state_maps(*cs))
|
||||
*cs= NULL;
|
||||
if (*cs)
|
||||
{
|
||||
if (cs[0]->ctype)
|
||||
if (init_state_maps(*cs))
|
||||
*cs= NULL;
|
||||
}
|
||||
}
|
||||
|
||||
strmov(get_charsets_dir(fname), MY_CHARSET_INDEX);
|
||||
error= my_read_charset_file(fname,myflags);
|
||||
charset_initialized=1;
|
||||
}
|
||||
|
||||
strmov(get_charsets_dir(fname), MY_CHARSET_INDEX);
|
||||
error= my_read_charset_file(fname,myflags);
|
||||
charset_initialized=1;
|
||||
pthread_mutex_unlock(&THR_LOCK_charset);
|
||||
}
|
||||
return error;
|
||||
|
|
Loading…
Add table
Reference in a new issue