diff options
author | Igor Sysoev <igor@sysoev.ru> | 2007-04-18 15:28:11 +0400 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2007-04-18 15:28:11 +0400 |
commit | e5e4c0000d1fa5a387c32bba0fd4fcad53fd3e9f (patch) | |
tree | 9cb425afe515d6a3b5b1d8bf79fe26970ffce2c5 /src | |
parent | 5dbc83df060fb4593a4e1f1006ed999858b26c0c (diff) |
fix segfault when
*) perl was built without multiplicity
*) when configuration was invalid
Diffstat (limited to 'src')
-rw-r--r-- | src/core/ngx_cycle.c | 13 | ||||
-rw-r--r-- | src/http/modules/perl/ngx_http_perl_module.c | 5 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c index 243febd0e..f900a2824 100644 --- a/src/core/ngx_cycle.c +++ b/src/core/ngx_cycle.c @@ -54,11 +54,8 @@ ngx_init_cycle(ngx_cycle_t *old_cycle) ngx_list_part_t *part, *opart; ngx_open_file_t *file; ngx_listening_t *ls, *nls; - ngx_core_conf_t *ccf; + ngx_core_conf_t *ccf, *old_ccf; ngx_core_module_t *module; -#if !(WIN32) - ngx_core_conf_t *old_ccf; -#endif log = old_cycle->log; @@ -747,6 +744,14 @@ old_shm_zone_done: failed: + if (!ngx_is_init_cycle(old_cycle)) { + old_ccf = (ngx_core_conf_t *) ngx_get_conf(old_cycle->conf_ctx, + ngx_core_module); + if (old_ccf->environment) { + environ = old_ccf->environment; + } + } + /* rollback the new cycle configuration */ part = &cycle->open_files.part; diff --git a/src/http/modules/perl/ngx_http_perl_module.c b/src/http/modules/perl/ngx_http_perl_module.c index 3006a070c..b11320dad 100644 --- a/src/http/modules/perl/ngx_http_perl_module.c +++ b/src/http/modules/perl/ngx_http_perl_module.c @@ -459,6 +459,11 @@ ngx_http_perl_init_interpreter(ngx_conf_t *cf, ngx_http_perl_main_conf_t *pmcf) #if !(NGX_HAVE_PERL_MULTIPLICITY) if (perl) { + + if (ngx_set_environment(cf->cycle, NULL) == NULL) { + return NGX_CONF_ERROR; + } + if (ngx_http_perl_run_requires(aTHX_ &pmcf->requires, cf->log) != NGX_OK) { |