summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-03-16 18:51:34 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-03-16 18:51:34 +0900
commit4d93b6299c99ca503f378d1e6af29f566fe7e8ab (patch)
tree6d41eebab9762a2a4b8f2398e0040fc6f648f3a1 /string.c
parentf91ea2332420bcabfafbb2540238f4f8422bfb97 (diff)
downloadruby-4d93b6299c99ca503f378d1e6af29f566fe7e8ab.tar.gz
Initialize mutex for crypt(3) statically
Assuming that all platforms, where only `crypt` is available but not `crypt_r`, are POSIX-base.
Diffstat (limited to 'string.c')
-rw-r--r--string.c25
1 files changed, 1 insertions, 24 deletions
diff --git a/string.c b/string.c
index 7ac11c31d4..a97b6adc67 100644
--- a/string.c
+++ b/string.c
@@ -10158,35 +10158,12 @@ rb_str_oct(VALUE str)
# include "ruby/atomic.h"
static struct {
- rb_atomic_t initialized;
rb_nativethread_lock_t lock;
-} crypt_mutex;
-
-static void
-crypt_mutex_destroy(void)
-{
- RUBY_ASSERT_ALWAYS(crypt_mutex.initialized == 1);
- rb_nativethread_lock_destroy(&crypt_mutex.lock);
- crypt_mutex.initialized = 0;
-}
+} crypt_mutex = {PTHREAD_MUTEX_INITIALIZER};
static void
crypt_mutex_initialize(void)
{
- rb_atomic_t i;
- while ((i = RUBY_ATOMIC_CAS(crypt_mutex.initialized, 0, 2)) == 2);
- switch (i) {
- case 0:
- rb_nativethread_lock_initialize(&crypt_mutex.lock);
- atexit(crypt_mutex_destroy);
- RUBY_ASSERT(crypt_mutex.initialized == 2);
- RUBY_ATOMIC_CAS(crypt_mutex.initialized, 2, 1);
- break;
- case 1:
- break;
- default:
- rb_bug("crypt_mutex.initialized: %d->%d", i, crypt_mutex.initialized);
- }
}
#endif