]> git.kaiwu.me - quickjs.git/commitdiff
make JS_NewClassID thread safe
authorFabrice Bellard <fabrice@bellard.org>
Tue, 2 Jan 2024 15:08:48 +0000 (16:08 +0100)
committerFabrice Bellard <fabrice@bellard.org>
Tue, 2 Jan 2024 15:08:48 +0000 (16:08 +0100)
quickjs.c

index 7eaee1a5fd8b4c51be80ec1ce63b7fb5556af069..06cf581ddb3daa298b625b876f981b5882d89fe7 100644 (file)
--- a/quickjs.c
+++ b/quickjs.c
@@ -3384,16 +3384,25 @@ static inline BOOL JS_IsEmptyString(JSValueConst v)
 
 /* JSClass support */
 
+#ifdef CONFIG_ATOMICS
+static pthread_mutex_t js_class_id_mutex = PTHREAD_MUTEX_INITIALIZER;
+#endif
+
 /* a new class ID is allocated if *pclass_id != 0 */
 JSClassID JS_NewClassID(JSClassID *pclass_id)
 {
     JSClassID class_id;
-    /* XXX: make it thread safe */
+#ifdef CONFIG_ATOMICS
+    pthread_mutex_lock(&js_class_id_mutex);
+#endif
     class_id = *pclass_id;
     if (class_id == 0) {
         class_id = js_class_id_alloc++;
         *pclass_id = class_id;
     }
+#ifdef CONFIG_ATOMICS
+    pthread_mutex_unlock(&js_class_id_mutex);
+#endif
     return class_id;
 }