diff options
author | Zeev Suraski <zeev@php.net> | 1999-04-26 14:10:42 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 1999-04-26 14:10:42 +0000 |
commit | 7c4a08381e458a7efe470185336c3f9c02276d45 (patch) | |
tree | ae39a1acc0d02a05a2daf33c9da4f04ac9536874 /Zend | |
parent | 7942eaf38138ef8751a447dadb930a129528fb6b (diff) | |
download | php-git-7c4a08381e458a7efe470185336c3f9c02276d45.tar.gz |
Various thread safety fixes and DLL updates
Diffstat (limited to 'Zend')
-rw-r--r-- | Zend/config.w32.h | 2 | ||||
-rw-r--r-- | Zend/libzend.dsp | 20 | ||||
-rw-r--r-- | Zend/libzendts.dsp | 16 | ||||
-rw-r--r-- | Zend/zend-scanner.l | 5 | ||||
-rw-r--r-- | Zend/zend.c | 18 | ||||
-rw-r--r-- | Zend/zend_alloc.c | 9 | ||||
-rw-r--r-- | Zend/zend_compile.h | 12 | ||||
-rw-r--r-- | Zend/zend_globals.h | 1 | ||||
-rw-r--r-- | Zend/zend_highlight.c | 2 | ||||
-rw-r--r-- | Zend/zend_highlight.h | 2 | ||||
-rw-r--r-- | Zend/zend_indent.c | 2 | ||||
-rw-r--r-- | Zend/zend_indent.h | 2 | ||||
-rw-r--r-- | Zend/zend_opcode.c | 7 | ||||
-rw-r--r-- | Zend/zend_sprintf.c | 2 |
14 files changed, 61 insertions, 39 deletions
diff --git a/Zend/config.w32.h b/Zend/config.w32.h index dac03e3b46..66c52c2c2d 100644 --- a/Zend/config.w32.h +++ b/Zend/config.w32.h @@ -31,7 +31,7 @@ typedef unsigned int uint; #define DL_HANDLE HMODULE #define ZEND_EXTENSIONS_SUPPORT 1 -#ifdef COMPILE_LIBZEND +#ifdef LIBZEND_EXPORTS # define ZEND_API __declspec(dllexport) #else # define ZEND_API __declspec(dllimport) diff --git a/Zend/libzend.dsp b/Zend/libzend.dsp index 4fe57c27f6..22f5444847 100644 --- a/Zend/libzend.dsp +++ b/Zend/libzend.dsp @@ -31,17 +31,15 @@ RSC=rc.exe !IF "$(CFG)" == "libzend - Win32 Release" # PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDebug" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDebug" /D "_MBCS" /D "_LIB" /D "COMPILE_LIBZEND" /FR /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug" /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "WIN32" /D "_MBCS" /FR /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x40d /d "NDebug" # ADD RSC /l 0x40d /d "NDebug" @@ -55,17 +53,15 @@ LIB32=link.exe -lib !ELSEIF "$(CFG)" == "libzend - Win32 Debug" # PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_Debug" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_Debug" /D "_MBCS" /D "_LIB" /D "COMPILE_LIBZEND" /FR /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_Debug" /D "_LIB" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /FR /YX /FD /GZ /c # ADD BASE RSC /l 0x40d /d "_Debug" # ADD RSC /l 0x40d /d "_Debug" BSC32=bscmake.exe @@ -178,6 +174,10 @@ SOURCE=.\config.w32.h # End Source File # Begin Source File +SOURCE=.\FlexLexer.h +# End Source File +# Begin Source File + SOURCE=.\modules.h # End Source File # Begin Source File @@ -313,6 +313,14 @@ SOURCE=".\zend-scanner.l" !IF "$(CFG)" == "libzend - Win32 Release" +# Begin Custom Build +InputPath=".\zend-scanner.l" + +"zend-scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + flex -i -Pzend -ozend-scanner.c zend-scanner.l + +# End Custom Build + !ELSEIF "$(CFG)" == "libzend - Win32 Debug" # Begin Custom Build diff --git a/Zend/libzendts.dsp b/Zend/libzendts.dsp index 23689d83c8..f563413aa8 100644 --- a/Zend/libzendts.dsp +++ b/Zend/libzendts.dsp @@ -39,7 +39,7 @@ RSC=rc.exe # PROP Intermediate_Dir "Release_TS" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDebug_TS" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /D "NDebug_TS" /D "WIN32" /D "_MBCS" /D "_LIB" /D "COMPILE_LIBZEND" /D "ZTS" /D "TSRM_EXPORTS" /FR /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug_TS" /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "WIN32" /D "_MBCS" /FR /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x40d /d "NDebug_TS" # ADD RSC /l 0x40d /d "NDebug_TS" @@ -61,7 +61,7 @@ LIB32=link.exe -lib # PROP Intermediate_Dir "Debug_TS" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_Debug_TS" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "." /D "_Debug_TS" /D "WIN32" /D "_MBCS" /D "_LIB" /D "COMPILE_LIBZEND" /D "ZTS" /D "TSRM_EXPORTS" /FR /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_Debug_TS" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LIBZEND_EXPORTS" /D "ZTS" /D "TSRM_EXPORTS" /FR /YX /FD /GZ /c # ADD BASE RSC /l 0x40d /d "_Debug_TS" # ADD RSC /l 0x40d /d "_Debug_TS" BSC32=bscmake.exe @@ -82,10 +82,6 @@ LIB32=link.exe -lib # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File -SOURCE=".\zend-parser.c" -# End Source File -# Begin Source File - SOURCE=".\zend-scanner.cpp" # End Source File # Begin Source File @@ -313,6 +309,14 @@ SOURCE=".\zend-scanner.l" !IF "$(CFG)" == "libzendts - Win32 Release_TS" +# Begin Custom Build +InputPath=".\zend-scanner.l" + +"zend-scanner.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + flex -+ -i -Sflex.skl -Pzend -ozend-scanner.cpp zend-scanner.l + +# End Custom Build + !ELSEIF "$(CFG)" == "libzendts - Win32 Debug_TS" # Begin Custom Build diff --git a/Zend/zend-scanner.l b/Zend/zend-scanner.l index 86bd11f2db..75514fe0ae 100644 --- a/Zend/zend-scanner.l +++ b/Zend/zend-scanner.l @@ -145,7 +145,7 @@ inline void restore_lexical_state(zend_lex_state *lex_state CLS_DC) BEGIN_EXTERN_C() -inline int open_file_for_scanning(zend_file_handle *file_handle CLS_DC) +ZEND_API inline int open_file_for_scanning(zend_file_handle *file_handle CLS_DC) { #ifndef ZTS FILE *tmp; @@ -170,8 +170,7 @@ inline int open_file_for_scanning(zend_file_handle *file_handle CLS_DC) yyin = tmp; yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE)); BEGIN(INITIAL); - -#else + #else ifstream *input_file = new ifstream(file_handle->filename); CG(ZFL) = new ZendFlexLexer; diff --git a/Zend/zend.c b/Zend/zend.c index 448d43051b..d0f9418f20 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -179,13 +179,16 @@ static void register_standard_class() #ifdef ZTS static void compiler_globals_ctor(zend_compiler_globals *compiler_globals) { + zend_function tmp_func; + zend_class_entry tmp_class; + compiler_globals->function_table = (HashTable *) malloc(sizeof(HashTable)); zend_hash_init(compiler_globals->function_table, 100, NULL, (void (*)(void *)) destroy_zend_function, 1); - zend_hash_copy(compiler_globals->function_table, global_function_table, NULL, NULL, 0); + zend_hash_copy(compiler_globals->function_table, global_function_table, NULL, &tmp_func, sizeof(zend_function)); compiler_globals->class_table = (HashTable *) malloc(sizeof(HashTable)); zend_hash_init(compiler_globals->class_table, 10, NULL, (void (*)(void *)) destroy_zend_class, 1); - zend_hash_copy(compiler_globals->class_table, global_class_table, NULL, NULL, 0); + zend_hash_copy(compiler_globals->class_table, global_class_table, zend_class_add_ref, &tmp_class, sizeof(zend_class_entry)); } @@ -210,12 +213,18 @@ static void executor_globals_dtor(zend_executor_globals *executor_globals) } +static void alloc_globals_ctor(zend_alloc_globals *alloc_globals) +{ + start_memory_manager(); +} + #endif int zend_startup(zend_utility_functions *utility_functions, char **extensions) { #ifdef ZTS + zend_compiler_globals *compiler_globals; zend_executor_globals *executor_globals; tsrm_startup(1,1,0); @@ -259,7 +268,12 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions) #ifdef ZTS compiler_globals_id = ts_allocate_id(sizeof(zend_compiler_globals), (void (*)(void *)) compiler_globals_ctor, (void (*)(void *)) compiler_globals_dtor); executor_globals_id = ts_allocate_id(sizeof(zend_executor_globals), (void (*)(void *)) executor_globals_ctor, (void (*)(void *)) executor_globals_dtor); + compiler_globals = ts_resource(compiler_globals_id); executor_globals = ts_resource(executor_globals_id); + zend_hash_destroy(compiler_globals->function_table); + zend_hash_destroy(compiler_globals->class_table); + compiler_globals->function_table = GLOBAL_FUNCTION_TABLE; + compiler_globals->class_table = GLOBAL_CLASS_TABLE; #endif init_resource_plist(ELS_C); diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c index 45cace4c4e..c4a431e8e8 100644 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@ -517,15 +517,6 @@ ZEND_API void _persist_alloc(void *ptr) } -#ifdef ZTS - -void alloc_globals_ctor(zend_alloc_globals *alloc_globals) -{ - start_memory_manager(); -} - - -#endif /* * Local variables: * tab-width: 4 diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 494fdf1e98..499178444e 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -321,6 +321,8 @@ void do_extended_info(CLS_D); void do_extended_fcall_begin(CLS_D); void do_extended_fcall_end(CLS_D); +#define INITIAL_OP_ARRAY_SIZE 64 + /* helper functions in zend-scanner.l */ BEGIN_EXTERN_C() @@ -330,19 +332,15 @@ ZEND_API zend_op_array *compile_files(int mark_as_ref CLS_DC, int file_count, .. ZEND_API zend_op_array *v_compile_files(int mark_as_ref CLS_DC, int file_count, va_list files); ZEND_API zend_op_array *compile_string(zval *source_string CLS_DC); ZEND_API zend_op_array *compile_filename(zval *filename CLS_DC); -inline int open_file_for_scanning(zend_file_handle *file_handle CLS_DC); -END_EXTERN_C() - -#define INITIAL_OP_ARRAY_SIZE 64 - - -BEGIN_EXTERN_C() +ZEND_API inline int open_file_for_scanning(zend_file_handle *file_handle CLS_DC); ZEND_API void init_op_array(zend_op_array *op_array, int initial_ops_size); ZEND_API void destroy_op_array(zend_op_array *op_array); END_EXTERN_C() ZEND_API void destroy_zend_function(zend_function *function); ZEND_API void destroy_zend_class(zend_class_entry *ce); +void zend_class_add_ref(zend_class_entry *ce); + zend_op *get_next_op(zend_op_array *op_array CLS_DC); int get_next_op_number(zend_op_array *op_array); int print_class(zend_class_entry *class_entry); diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index 66f9100d08..73622e582d 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -101,7 +101,6 @@ extern ZEND_API zend_executor_globals executor_globals; # define ALS_CC , ALS_C # define AG(v) (((zend_alloc_globals *) alloc_globals)->v) # define ALS_FETCH() zend_alloc_globals *alloc_globals = (zend_alloc_globals *) ts_resource(alloc_globals_id) -void alloc_globals_ctor(zend_alloc_globals *alloc_globals); #else # define ALS_D # define ALS_DC diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c index 142a665d72..0fc0b8cbcd 100644 --- a/Zend/zend_highlight.c +++ b/Zend/zend_highlight.c @@ -67,7 +67,7 @@ static void html_puts(char *s, uint len) -void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini) +ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini) { zval token; int token_type; diff --git a/Zend/zend_highlight.h b/Zend/zend_highlight.h index 0769139c62..00b576a186 100644 --- a/Zend/zend_highlight.h +++ b/Zend/zend_highlight.h @@ -35,7 +35,7 @@ typedef struct { BEGIN_EXTERN_C() -void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini); +ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini); int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini); int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini); END_EXTERN_C() diff --git a/Zend/zend_indent.c b/Zend/zend_indent.c index 63e1e3143c..3c2ff59786 100644 --- a/Zend/zend_indent.c +++ b/Zend/zend_indent.c @@ -46,7 +46,7 @@ static void handle_whitespace(int *emit_whitespace) } -void zend_indent() +ZEND_API void zend_indent() { zval token; int token_type; diff --git a/Zend/zend_indent.h b/Zend/zend_indent.h index 49cc9949f0..f376cbfb2b 100644 --- a/Zend/zend_indent.h +++ b/Zend/zend_indent.h @@ -17,6 +17,6 @@ #ifndef _ZEND_INDENT_H #define _ZEND_INDENT_H -void zend_indent(); +ZEND_API void zend_indent(); #endif /* _ZEND_INDENT_H */ diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c index 5cdc477796..8af45c0064 100644 --- a/Zend/zend_opcode.c +++ b/Zend/zend_opcode.c @@ -24,6 +24,7 @@ #include "zend_extensions.h" #include "zend_API.h" + static void zend_extension_op_array_ctor_handler(zend_extension *extension, zend_op_array *op_array) { if (extension->op_array_ctor) { @@ -131,6 +132,12 @@ ZEND_API void destroy_zend_class(zend_class_entry *ce) } +void zend_class_add_ref(zend_class_entry *ce) +{ + (*ce->refcount)++; +} + + ZEND_API void destroy_op_array(zend_op_array *op_array) { zend_op *opline = op_array->opcodes; diff --git a/Zend/zend_sprintf.c b/Zend/zend_sprintf.c index bebfd2ae8f..8f382c9204 100644 --- a/Zend/zend_sprintf.c +++ b/Zend/zend_sprintf.c @@ -22,6 +22,7 @@ #include <stdarg.h> #endif +#if BROKEN_SPRINTF int zend_sprintf(char *buffer, const char *format, ...) { va_list args; @@ -32,3 +33,4 @@ int zend_sprintf(char *buffer, const char *format, ...) return strlen(buffer); } +#endif
\ No newline at end of file |