@@ -827,10 +827,17 @@ static int v8js_register_extension(char *name, uint name_len, char *source, uint
827
827
{
828
828
v8js_jsext *jsext = NULL ;
829
829
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
834
841
return FAILURE;
835
842
}
836
843
@@ -843,6 +850,9 @@ static int v8js_register_extension(char *name, uint name_len, char *source, uint
843
850
php_error_docref (NULL TSRMLS_CC, E_WARNING, " Invalid dependency array passed" );
844
851
v8js_jsext_dtor (jsext);
845
852
free (jsext);
853
+ #ifdef ZTS
854
+ v8js_process_globals.lock .unlock ();
855
+ #endif
846
856
return FAILURE;
847
857
}
848
858
}
@@ -859,17 +869,23 @@ static int v8js_register_extension(char *name, uint name_len, char *source, uint
859
869
860
870
jsext->extension = new v8::Extension (jsext->name , jsext->source , jsext->deps_count , jsext->deps );
861
871
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) {
863
873
v8js_jsext_dtor (jsext);
864
874
free (jsext);
875
+ #ifdef ZTS
876
+ v8js_process_globals.lock .unlock ();
877
+ #endif
865
878
return FAILURE;
866
879
}
867
880
881
+ #ifdef ZTS
882
+ v8js_process_globals.lock .unlock ();
883
+ #endif
884
+
868
885
jsext->extension ->set_auto_enable (auto_enable ? true : false );
869
886
v8::RegisterExtension (jsext->extension );
870
887
871
888
free (jsext);
872
-
873
889
return SUCCESS;
874
890
}
875
891
/* }}} */
@@ -916,10 +932,15 @@ static PHP_METHOD(V8Js, getExtensions)
916
932
}
917
933
918
934
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) {
923
944
MAKE_STD_ZVAL (ext)
924
945
array_init (ext);
925
946
add_assoc_bool_ex (ext, ZEND_STRS (" auto_enable" ), jsext->auto_enable );
@@ -931,9 +952,13 @@ static PHP_METHOD(V8Js, getExtensions)
931
952
}
932
953
add_assoc_zval_ex (return_value, key, key_len, ext);
933
954
}
934
- zend_hash_move_forward_ex (V8JSG ( extensions) , &pos);
955
+ zend_hash_move_forward_ex (v8js_process_globals. extensions , &pos);
935
956
}
936
957
}
958
+
959
+ #ifdef ZTS
960
+ v8js_process_globals.lock .unlock ();
961
+ #endif
937
962
}
938
963
/* }}} */
939
964
0 commit comments