From: Zeev Suraski Date: Mon, 25 Sep 2000 18:10:45 +0000 (+0000) Subject: Fix previous update - move extension startup further down the startup sequence X-Git-Tag: php-4.0.3RC1~69 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=309827ec1dcc87886825edc057e816e5cb8eb3c5;p=php Fix previous update - move extension startup further down the startup sequence --- diff --git a/Zend/zend.c b/Zend/zend.c index ef08a88271..710cf2b2f4 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -335,7 +335,9 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions, i fpsetmask(mask & ~FP_X_IMP); } #endif - + + zend_startup_extensions_mechanism(); + /* Set up utility functions and values */ zend_error_cb = utility_functions->error_function; zend_printf = utility_functions->printf_function; diff --git a/Zend/zend_extensions.c b/Zend/zend_extensions.c index ac44b533f3..1b88efdbec 100644 --- a/Zend/zend_extensions.c +++ b/Zend/zend_extensions.c @@ -114,13 +114,6 @@ int zend_register_extension(zend_extension *new_extension, DL_HANDLE handle) #if ZEND_EXTENSIONS_SUPPORT zend_extension extension; - if (new_extension->startup) { - if (new_extension->startup(new_extension)!=SUCCESS) { - DL_UNLOAD(handle); - return FAILURE; - } - } - extension = *new_extension; extension.handle = handle; @@ -146,14 +139,32 @@ static void zend_extension_shutdown(zend_extension *extension) } -int zend_startup_extensions() +static void zend_extension_startup(zend_extension *extension) +{ + if (extension->startup) { + if (extension->startup(extension)!=SUCCESS) { + DL_UNLOAD(extension->handle); + } + } +} + + +int zend_startup_extensions_mechanism() { + /* Startup extensions mechanism */ zend_llist_init(&zend_extensions, sizeof(zend_extension), (void (*)(void *)) zend_extension_dtor, 1); last_resource_number = 0; return SUCCESS; } +int zend_startup_extensions() +{ + zend_llist_apply(&zend_extensions, (void (*)(void *)) zend_extension_startup); + return SUCCESS; +} + + void zend_shutdown_extensions() { zend_llist_apply(&zend_extensions, (void (*)(void *)) zend_extension_shutdown); @@ -163,7 +174,7 @@ void zend_shutdown_extensions() void zend_extension_dtor(zend_extension *extension) { -#if ZEND_EXTENSIONS_SUPPORT +#if ZEND_EXTENSIONS_SUPPORT && !ZEND_DEBUG if (extension->handle) { DL_UNLOAD(extension->handle); } diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h index 0e87cd19d6..ddc1ab330d 100644 --- a/Zend/zend_extensions.h +++ b/Zend/zend_extensions.h @@ -91,6 +91,7 @@ ZEND_API int zend_load_extension(char *path); ZEND_API int zend_load_extensions(char **extension_paths); ZEND_API int zend_register_extension(zend_extension *new_extension, DL_HANDLE handle); void zend_append_version_info(zend_extension *extension); +int zend_startup_extensions_mechanism(void); int zend_startup_extensions(void); void zend_shutdown_extensions(void);