summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>1999-04-19 21:39:18 +0000
committerZeev Suraski <zeev@php.net>1999-04-19 21:39:18 +0000
commitb7c30c1bdf209bc270755bcafac45908fc8daf2f (patch)
tree7aa6df21b2e3c196ab7496037939857270bc88b3
parent84e9ea172699dcae7a29a0651448845ba2bf056e (diff)
downloadphp-git-b7c30c1bdf209bc270755bcafac45908fc8daf2f.tar.gz
Return a success value from the startup function, so we can unload immediately
if it fails.
-rw-r--r--Zend/zend_extensions.c8
-rw-r--r--Zend/zend_extensions.h2
2 files changed, 8 insertions, 2 deletions
diff --git a/Zend/zend_extensions.c b/Zend/zend_extensions.c
index ce49505f12..92eb410aa9 100644
--- a/Zend/zend_extensions.c
+++ b/Zend/zend_extensions.c
@@ -63,6 +63,7 @@ int zend_load_extension(char *path)
extension_version_info->required_zend_version,
ZEND_VERSION,
ZEND_EXTENSION_API_NO);
+ DL_UNLOAD(handle);
return FAILURE;
} else if (extension_version_info->zend_extension_api_no < ZEND_EXTENSION_API_NO) {
/* we may be able to allow for downwards compatability in some harmless cases. */
@@ -73,17 +74,22 @@ int zend_load_extension(char *path)
ZEND_EXTENSION_API_NO,
new_extension->author,
new_extension->URL);
+ DL_UNLOAD(handle);
return FAILURE;
} else if (ZTS_V!=extension_version_info->thread_safe) {
zend_printf("Cannot load %s - it %s thread safe, whereas Zend %s\n",
new_extension->name,
(extension_version_info->thread_safe?"is":"isn't"),
(ZTS_V?"is":"isn't"));
+ DL_UNLOAD(handle);
return FAILURE;
}
if (new_extension->startup) {
- new_extension->startup(new_extension);
+ if (new_extension->startup(new_extension)!=SUCCESS) {
+ DL_UNLOAD(handle);
+ return FAILURE;
+ }
}
extension = *new_extension;
extension.handle = handle;
diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h
index 502f807600..cd1c3cb974 100644
--- a/Zend/zend_extensions.h
+++ b/Zend/zend_extensions.h
@@ -37,7 +37,7 @@ struct _zend_extension {
char *URL;
char *copyright;
- void (*startup)(zend_extension *extension);
+ int (*startup)(zend_extension *extension);
void (*shutdown)(zend_extension *extension);
void (*activate)();
void (*deactivate)();