summaryrefslogtreecommitdiff
path: root/embedvar.h
diff options
context:
space:
mode:
authorKarl Williamson <khw@cpan.org>2018-02-13 13:12:50 -0700
committerKarl Williamson <khw@cpan.org>2018-02-18 15:44:23 -0700
commit49d7d366441813aa7301b1a437e302372f04f31a (patch)
tree619c3271adeeab23fe9ea25c9517ebf9807cc1fe /embedvar.h
parent398eeea9cd1c8a9b95329a3eca8be6a2a5903ac5 (diff)
downloadperl-49d7d366441813aa7301b1a437e302372f04f31a.tar.gz
Latch LC_NUMERIC during critical sections
It is possible for operations on threaded perls which don't 'use locale' to still change the locale. This happens when calling POSIX::localeconv() and I18N::Langinfo(), and in earlier perls, it can happen for other operations when perl has been initialized with the environment causing the various locale categories to not have a uniform locale. This commit causes the areas where the locale for this category should predictably be in one or the other state to be a critical section where another thread can't interrupt and change it. This is a separate mutex, so that only these particular operations will be held up.
Diffstat (limited to 'embedvar.h')
-rw-r--r--embedvar.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/embedvar.h b/embedvar.h
index d7eb929aa5..d8b09fe35b 100644
--- a/embedvar.h
+++ b/embedvar.h
@@ -187,6 +187,7 @@
#define PL_lastgotoprobe (vTHX->Ilastgotoprobe)
#define PL_laststatval (vTHX->Ilaststatval)
#define PL_laststype (vTHX->Ilaststype)
+#define PL_lc_numeric_mutex_depth (vTHX->Ilc_numeric_mutex_depth)
#define PL_locale_utf8ness (vTHX->Ilocale_utf8ness)
#define PL_localizing (vTHX->Ilocalizing)
#define PL_localpatches (vTHX->Ilocalpatches)
@@ -406,6 +407,8 @@
#define PL_Gkeyword_plugin (my_vars->Gkeyword_plugin)
#define PL_keyword_plugin_mutex (my_vars->Gkeyword_plugin_mutex)
#define PL_Gkeyword_plugin_mutex (my_vars->Gkeyword_plugin_mutex)
+#define PL_lc_numeric_mutex (my_vars->Glc_numeric_mutex)
+#define PL_Glc_numeric_mutex (my_vars->Glc_numeric_mutex)
#define PL_locale_mutex (my_vars->Glocale_mutex)
#define PL_Glocale_mutex (my_vars->Glocale_mutex)
#define PL_malloc_mutex (my_vars->Gmalloc_mutex)