@@ -827,10 +827,17 @@ static int v8js_register_extension(char *name, uint name_len, char *source, uint
827827{
828828 v8js_jsext *jsext = NULL ;
829829
830- if (!V8JSG (extensions)) {
831- V8JSG (extensions) = (HashTable *) malloc (sizeof (HashTable));
832- zend_hash_init (V8JSG (extensions), 1 , NULL , (dtor_func_t ) v8js_jsext_dtor, 1 );
833- } else if (zend_hash_exists (V8JSG (extensions), name, name_len + 1 )) {
830+ #ifdef ZTS
831+ v8js_process_globals.lock .lock ();
832+ #endif
833+
834+ if (!v8js_process_globals.extensions ) {
835+ v8js_process_globals.extensions = (HashTable *) malloc (sizeof (HashTable));
836+ zend_hash_init (v8js_process_globals.extensions , 1 , NULL , (dtor_func_t ) v8js_jsext_dtor, 1 );
837+ } else if (zend_hash_exists (v8js_process_globals.extensions , name, name_len + 1 )) {
838+ #ifdef ZTS
839+ v8js_process_globals.lock .unlock ();
840+ #endif
834841 return FAILURE;
835842 }
836843
@@ -843,6 +850,9 @@ static int v8js_register_extension(char *name, uint name_len, char *source, uint
843850 php_error_docref (NULL TSRMLS_CC, E_WARNING, " Invalid dependency array passed" );
844851 v8js_jsext_dtor (jsext);
845852 free (jsext);
853+ #ifdef ZTS
854+ v8js_process_globals.lock .unlock ();
855+ #endif
846856 return FAILURE;
847857 }
848858 }
@@ -859,17 +869,23 @@ static int v8js_register_extension(char *name, uint name_len, char *source, uint
859869
860870 jsext->extension = new v8::Extension (jsext->name , jsext->source , jsext->deps_count , jsext->deps );
861871
862- if (zend_hash_add (V8JSG ( extensions) , name, name_len + 1 , jsext, sizeof (v8js_jsext), NULL ) == FAILURE) {
872+ if (zend_hash_add (v8js_process_globals. extensions , name, name_len + 1 , jsext, sizeof (v8js_jsext), NULL ) == FAILURE) {
863873 v8js_jsext_dtor (jsext);
864874 free (jsext);
875+ #ifdef ZTS
876+ v8js_process_globals.lock .unlock ();
877+ #endif
865878 return FAILURE;
866879 }
867880
881+ #ifdef ZTS
882+ v8js_process_globals.lock .unlock ();
883+ #endif
884+
868885 jsext->extension ->set_auto_enable (auto_enable ? true : false );
869886 v8::RegisterExtension (jsext->extension );
870887
871888 free (jsext);
872-
873889 return SUCCESS;
874890}
875891/* }}} */
@@ -916,10 +932,15 @@ static PHP_METHOD(V8Js, getExtensions)
916932 }
917933
918934 array_init (return_value);
919- if (V8JSG (extensions)) {
920- zend_hash_internal_pointer_reset_ex (V8JSG (extensions), &pos);
921- while (zend_hash_get_current_data_ex (V8JSG (extensions), (void **) &jsext, &pos) == SUCCESS) {
922- if (zend_hash_get_current_key_ex (V8JSG (extensions), &key, &key_len, &index, 0 , &pos) == HASH_KEY_IS_STRING) {
935+
936+ #ifdef ZTS
937+ v8js_process_globals.lock .lock ();
938+ #endif
939+
940+ if (v8js_process_globals.extensions ) {
941+ zend_hash_internal_pointer_reset_ex (v8js_process_globals.extensions , &pos);
942+ while (zend_hash_get_current_data_ex (v8js_process_globals.extensions , (void **) &jsext, &pos) == SUCCESS) {
943+ if (zend_hash_get_current_key_ex (v8js_process_globals.extensions , &key, &key_len, &index, 0 , &pos) == HASH_KEY_IS_STRING) {
923944 MAKE_STD_ZVAL (ext)
924945 array_init (ext);
925946 add_assoc_bool_ex (ext, ZEND_STRS (" auto_enable" ), jsext->auto_enable );
@@ -931,9 +952,13 @@ static PHP_METHOD(V8Js, getExtensions)
931952 }
932953 add_assoc_zval_ex (return_value, key, key_len, ext);
933954 }
934- zend_hash_move_forward_ex (V8JSG ( extensions) , &pos);
955+ zend_hash_move_forward_ex (v8js_process_globals. extensions , &pos);
935956 }
936957 }
958+
959+ #ifdef ZTS
960+ v8js_process_globals.lock .unlock ();
961+ #endif
937962}
938963/* }}} */
939964
0 commit comments