* intl/dcigettext.c (_nl_find_msg): Call _nl_load_domain also if
decided < 0.
* intl/finddomain.c (_nl_find_domain): Likewise.
- * intl/l10nflist.c (_nl_make_l10nflist): Initialize lock.
- * intl/loadinfo.h (struct loaded_l10nfile): Add lock element.
* intl/loadmsgcat.c (_nl_load_domain): Set decided to 1 only once we
are done. First set to -1 to signal initialization is ongoing.
Protect against concurrent callers with recursive lock.
|| ((mask & XPG_CODESET) != 0
&& (mask & XPG_NORM_CODESET) != 0));
retval->data = NULL;
- __libc_lock_init_recursive (retval->lock);
if (last == NULL)
{
#ifndef _LOADINFO_H
#define _LOADINFO_H 1
-#include <bits/libc-lock.h>
-
/* Declarations of locale dependent catalog lookup functions.
Implemented in
{
const char *filename;
int decided;
- __libc_lock_define_recursive (, lock);
const void *data;
#ifdef _LIBC
# include "../locale/localeinfo.h"
# include <not-cancel.h>
+# include <bits/libc-lock.h>
#endif
/* Provide fallback values for macros that ought to be defined in <inttypes.h>.
struct loaded_l10nfile *domain_file;
struct binding *domainbinding;
{
+ __libc_lock_define_initialized_recursive (static, lock);
int fd = -1;
size_t size;
#ifdef _LIBC
int revision;
const char *nullentry;
- __libc_lock_lock_recursive (domain_file->lock);
+ __libc_lock_lock_recursive (lock);
if (domain_file->decided != 0)
{
/* There are two possibilities:
Not necessary anymore since if the lock is available this
is finished.
*/
- __libc_lock_unlock_recursive (domain_file->lock);
+ __libc_lock_unlock_recursive (lock);
return;
}
domain_file->decided = 1;
- __libc_lock_unlock_recursive (domain_file->lock);
+ __libc_lock_unlock_recursive (lock);
}