summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>1999-04-26 14:10:42 +0000
committerZeev Suraski <zeev@php.net>1999-04-26 14:10:42 +0000
commit7c4a08381e458a7efe470185336c3f9c02276d45 (patch)
treeae39a1acc0d02a05a2daf33c9da4f04ac9536874 /Zend
parent7942eaf38138ef8751a447dadb930a129528fb6b (diff)
downloadphp-git-7c4a08381e458a7efe470185336c3f9c02276d45.tar.gz
Various thread safety fixes and DLL updates
Diffstat (limited to 'Zend')
-rw-r--r--Zend/config.w32.h2
-rw-r--r--Zend/libzend.dsp20
-rw-r--r--Zend/libzendts.dsp16
-rw-r--r--Zend/zend-scanner.l5
-rw-r--r--Zend/zend.c18
-rw-r--r--Zend/zend_alloc.c9
-rw-r--r--Zend/zend_compile.h12
-rw-r--r--Zend/zend_globals.h1
-rw-r--r--Zend/zend_highlight.c2
-rw-r--r--Zend/zend_highlight.h2
-rw-r--r--Zend/zend_indent.c2
-rw-r--r--Zend/zend_indent.h2
-rw-r--r--Zend/zend_opcode.c7
-rw-r--r--Zend/zend_sprintf.c2
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