#endif /* DJGPP */
#ifndef PERL_SYS_TERM_BODY
-# define PERL_SYS_TERM_BODY() \
- HINTS_REFCNT_TERM; OP_CHECK_MUTEX_TERM; \
- OP_REFCNT_TERM; PERLIO_TERM; MALLOC_TERM
+# define PERL_SYS_TERM_BODY() \
+ HINTS_REFCNT_TERM; OP_CHECK_MUTEX_TERM; \
+ OP_REFCNT_TERM; PERLIO_TERM; MALLOC_TERM; LOCALE_TERM;
#endif
#define dXSUB_SYS
#define PL_Ghints_mutex (my_vars->Ghints_mutex)
#define PL_keyword_plugin (my_vars->Gkeyword_plugin)
#define PL_Gkeyword_plugin (my_vars->Gkeyword_plugin)
+#define PL_locale_mutex (my_vars->Glocale_mutex)
+#define PL_Glocale_mutex (my_vars->Glocale_mutex)
#define PL_malloc_mutex (my_vars->Gmalloc_mutex)
#define PL_Gmalloc_mutex (my_vars->Gmalloc_mutex)
#define PL_mmap_page_size (my_vars->Gmmap_page_size)
PL_regex_padav
PL_dollarzero_mutex
PL_hints_mutex
+ PL_locale_mutex
PL_my_ctx_mutex
PL_perlio_mutex
PL_stashpad
OP_REFCNT_INIT;
OP_CHECK_MUTEX_INIT;
HINTS_REFCNT_INIT;
+ LOCALE_INIT;
MUTEX_INIT(&PL_dollarzero_mutex);
MUTEX_INIT(&PL_my_ctx_mutex);
# endif
#ifdef USE_LOCALE
/* These locale things are all subject to change */
+
+# define LOCALE_INIT MUTEX_INIT(&PL_locale_mutex)
+# define LOCALE_TERM MUTEX_DESTROY(&PL_locale_mutex)
+
/* Returns TRUE if the plain locale pragma without a parameter is in effect
*/
# define IN_LOCALE_RUNTIME cBOOL(CopHINTS_get(PL_curcop) & HINT_LOCALE)
# endif /* PERL_CORE or PERL_IN_XSUB_RE */
#else /* No locale usage */
+# define LOCALE_INIT
+# define LOCALE_TERM
# define IN_LOCALE_RUNTIME 0
# define IN_SOME_LOCALE_FORM_RUNTIME 0
# define IN_LOCALE_COMPILETIME 0
#define PL_hints_mutex (*Perl_Ghints_mutex_ptr(NULL))
#undef PL_keyword_plugin
#define PL_keyword_plugin (*Perl_Gkeyword_plugin_ptr(NULL))
+#undef PL_locale_mutex
+#define PL_locale_mutex (*Perl_Glocale_mutex_ptr(NULL))
#undef PL_malloc_mutex
#define PL_malloc_mutex (*Perl_Gmalloc_mutex_ptr(NULL))
#undef PL_mmap_page_size
#if defined(USE_ITHREADS)
PERLVAR(G, hints_mutex, perl_mutex) /* Mutex for refcounted he refcounting */
+PERLVAR(G, locale_mutex, perl_mutex) /* Mutex for setlocale() changing */
+
#endif
#ifdef DEBUGGING
#define Mkdir(path,mode) mkdir((path),(mode))
#ifndef PERL_SYS_TERM_BODY
-#define PERL_SYS_TERM_BODY() HINTS_REFCNT_TERM; OP_REFCNT_TERM; \
- PERLIO_TERM; MALLOC_TERM; CloseSTDLIB();
+#define PERL_SYS_TERM_BODY() HINTS_REFCNT_TERM; OP_REFCNT_TERM; \
+ PERLIO_TERM; MALLOC_TERM; CloseSTDLIB(); \
+ PERL_LOCALE_TERM
+
#endif
#define BIT_BUCKET "NUL:"
#if defined(__amigaos4__)
# define PERL_SYS_INIT_BODY(c,v) \
MALLOC_CHECK_TAINT2(*c,*v) PERL_FPU_INIT; PERLIO_INIT; MALLOC_INIT; amigaos4_init_fork_array(); amigaos4_init_environ_sema();
-# define PERL_SYS_TERM_BODY() \
- HINTS_REFCNT_TERM; OP_CHECK_MUTEX_TERM; \
- OP_REFCNT_TERM; PERLIO_TERM; MALLOC_TERM; amigaos4_dispose_fork_array();
+# define PERL_SYS_TERM_BODY() \
+ HINTS_REFCNT_TERM; OP_CHECK_MUTEX_TERM; \
+ OP_REFCNT_TERM; PERLIO_TERM; MALLOC_TERM; LOCALE_TERM; \
+ amigaos4_dispose_fork_array();
#endif
#ifndef PERL_SYS_INIT_BODY
#endif
#ifndef PERL_SYS_TERM_BODY
-# define PERL_SYS_TERM_BODY() \
- HINTS_REFCNT_TERM; OP_CHECK_MUTEX_TERM; \
- OP_REFCNT_TERM; PERLIO_TERM; MALLOC_TERM;
+# define PERL_SYS_TERM_BODY() \
+ HINTS_REFCNT_TERM; OP_CHECK_MUTEX_TERM; \
+ OP_REFCNT_TERM; PERLIO_TERM; MALLOC_TERM; \
+ LOCALE_TERM;
#endif
#define BIT_BUCKET "/dev/null"
#define PERL_SYS_INIT_BODY(c,v) MALLOC_CHECK_TAINT2(*c,*v) vms_image_init((c),(v)); PERLIO_INIT; MALLOC_INIT
-#define PERL_SYS_TERM_BODY() HINTS_REFCNT_TERM; OP_REFCNT_TERM; PERLIO_TERM; MALLOC_TERM
+#define PERL_SYS_TERM_BODY() HINTS_REFCNT_TERM; OP_REFCNT_TERM; \
+ PERLIO_TERM; MALLOC_TERM; LOCALE_TERM
#define dXSUB_SYS
#define HAS_KILL
#define HAS_WAIT
OP_REFCNT_TERM;
PERLIO_TERM;
MALLOC_TERM;
+ LOCALE_TERM;
#ifndef WIN32_NO_REGISTRY
/* handles might be NULL, RegCloseKey then returns ERROR_INVALID_HANDLE
but no point of checking and we can't die() at this point */
OP_REFCNT_TERM;
PERLIO_TERM;
MALLOC_TERM;
+ LOCALE_TERM;
}
void