summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/internal/libc.h2
-rw-r--r--src/internal/locale_impl.h6
-rw-r--r--src/locale/setlocale.c7
-rw-r--r--src/locale/uselocale.c10
-rw-r--r--src/thread/pthread_create.c6
5 files changed, 4 insertions, 27 deletions
diff --git a/src/internal/libc.h b/src/internal/libc.h
index 51ee1860..212f0e8b 100644
--- a/src/internal/libc.h
+++ b/src/internal/libc.h
@@ -23,8 +23,6 @@ struct __libc {
volatile int ofl_lock[2];
size_t tls_size;
size_t page_size;
- volatile int uselocale_cnt;
- volatile int bytelocale_cnt_minus_1;
struct __locale_struct global_locale;
};
diff --git a/src/internal/locale_impl.h b/src/internal/locale_impl.h
index 9142f0c2..5aebbf68 100644
--- a/src/internal/locale_impl.h
+++ b/src/internal/locale_impl.h
@@ -20,11 +20,9 @@ const char *__lctrans_cur(const char *);
#define LCTRANS(msg, lc, loc) __lctrans(msg, (loc)->cat[(lc)-2])
#define LCTRANS_CUR(msg) __lctrans_cur(msg)
-#define CURRENT_LOCALE \
- (libc.uselocale_cnt ? __pthread_self()->locale : &libc.global_locale)
+#define CURRENT_LOCALE (__pthread_self()->locale)
-#define CURRENT_UTF8 \
- (libc.bytelocale_cnt_minus_1<0 || __pthread_self()->locale->ctype_utf8)
+#define CURRENT_UTF8 (__pthread_self()->locale->ctype_utf8)
#undef MB_CUR_MAX
#define MB_CUR_MAX (CURRENT_UTF8 ? 4 : 1)
diff --git a/src/locale/setlocale.c b/src/locale/setlocale.c
index 8ea389a3..d797f43f 100644
--- a/src/locale/setlocale.c
+++ b/src/locale/setlocale.c
@@ -55,12 +55,7 @@ char *setlocale(int cat, const char *name)
return buf;
}
- if (name) {
- int adj = libc.global_locale.ctype_utf8;
- __setlocalecat(&libc.global_locale, cat, name);
- adj -= libc.global_locale.ctype_utf8;
- if (adj) a_fetch_add(&libc.bytelocale_cnt_minus_1, adj);
- }
+ if (name) __setlocalecat(&libc.global_locale, cat, name);
switch (cat) {
case LC_CTYPE:
diff --git a/src/locale/uselocale.c b/src/locale/uselocale.c
index 51067957..b70a0c18 100644
--- a/src/locale/uselocale.c
+++ b/src/locale/uselocale.c
@@ -10,15 +10,7 @@ locale_t __uselocale(locale_t new)
if (new == LC_GLOBAL_LOCALE) new = global;
- if (new && new != old) {
- int adj = 0;
- if (new == global) a_dec(&libc.uselocale_cnt);
- else if (!new->ctype_utf8) adj++;
- if (old == global) a_inc(&libc.uselocale_cnt);
- else if (!old->ctype_utf8) adj--;
- a_fetch_add(&libc.bytelocale_cnt_minus_1, adj);
- self->locale = new;
- }
+ self->locale = new;
return old == global ? LC_GLOBAL_LOCALE : old;
}
diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c
index 4eb8b888..de72818d 100644
--- a/src/thread/pthread_create.c
+++ b/src/thread/pthread_create.c
@@ -67,12 +67,6 @@ _Noreturn void __pthread_exit(void *result)
exit(0);
}
- if (self->locale != &libc.global_locale) {
- a_dec(&libc.uselocale_cnt);
- if (self->locale->ctype_utf8)
- a_dec(&libc.bytelocale_cnt_minus_1);
- }
-
/* Process robust list in userspace to handle non-pshared mutexes
* and the detached thread case where the robust list head will
* be invalid when the kernel would process it. */