diff options
| author | Ben Fuhrmannek | 2021-08-18 10:54:58 +0200 |
|---|---|---|
| committer | Ben Fuhrmannek | 2021-08-18 10:54:58 +0200 |
| commit | 627932d1eb9cfa88c72df66e51f520e987d7655e (patch) | |
| tree | 45ffab040b01b1fb4f62216182d11b257bb922f4 | |
| parent | a67fd0af43e0cc786069bba4539e28eccdcb12b0 (diff) | |
start SP as late as possible. this allows us to hook functions of extensions supposed to be loaded later
| -rw-r--r-- | src/snuffleupagus.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/snuffleupagus.c b/src/snuffleupagus.c index 3ad47d5..650e5e4 100644 --- a/src/snuffleupagus.c +++ b/src/snuffleupagus.c | |||
| @@ -73,6 +73,26 @@ ZEND_DLEXPORT zend_extension zend_extension_entry = { | |||
| 73 | NULL, /* op_array_dtor_func_t */ | 73 | NULL, /* op_array_dtor_func_t */ |
| 74 | STANDARD_ZEND_EXTENSION_PROPERTIES}; | 74 | STANDARD_ZEND_EXTENSION_PROPERTIES}; |
| 75 | 75 | ||
| 76 | static void sp_load_other_modules() { | ||
| 77 | // try to load other modules before initializing Snuffleupagus | ||
| 78 | zend_module_entry *module; | ||
| 79 | bool should_start = false; | ||
| 80 | ZEND_HASH_FOREACH_PTR(&module_registry, module) { | ||
| 81 | if (should_start) { | ||
| 82 | sp_log_debug("attempting to start module '%s' early", module->name); | ||
| 83 | if (zend_startup_module_ex(module) != SUCCESS) { | ||
| 84 | // startup failed. let's try again later. | ||
| 85 | module->module_started = 0; | ||
| 86 | } | ||
| 87 | } | ||
| 88 | if (strcmp(module->name, PHP_SNUFFLEUPAGUS_EXTNAME) == 0) { | ||
| 89 | should_start = true; | ||
| 90 | } | ||
| 91 | } ZEND_HASH_FOREACH_END(); | ||
| 92 | |||
| 93 | |||
| 94 | } | ||
| 95 | |||
| 76 | static PHP_GINIT_FUNCTION(snuffleupagus) { | 96 | static PHP_GINIT_FUNCTION(snuffleupagus) { |
| 77 | #ifdef SP_DEBUG_STDERR | 97 | #ifdef SP_DEBUG_STDERR |
| 78 | if (getenv("SP_NODEBUG")) { | 98 | if (getenv("SP_NODEBUG")) { |
| @@ -82,6 +102,7 @@ static PHP_GINIT_FUNCTION(snuffleupagus) { | |||
| 82 | } | 102 | } |
| 83 | #endif | 103 | #endif |
| 84 | sp_log_debug("(GINIT)"); | 104 | sp_log_debug("(GINIT)"); |
| 105 | sp_load_other_modules(); | ||
| 85 | snuffleupagus_globals->is_config_valid = SP_CONFIG_NONE; | 106 | snuffleupagus_globals->is_config_valid = SP_CONFIG_NONE; |
| 86 | snuffleupagus_globals->in_eval = 0; | 107 | snuffleupagus_globals->in_eval = 0; |
| 87 | 108 | ||
