Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: panic MUTEX_LOCK
On Thu, Apr 16, 2009 at 12:08:17PM +0400, Igor Sysoev wrote:
> On Thu, Apr 16, 2009 at 11:10:07AM +0400, Igor Sysoev wrote:
>
> > У кого-нибудь воспроизводится panic MUTEX_LOCK, если nginx собран с перлом ?
> >
> > Я сейчас попробовал 0.7.51 с perl'ом
> > v5.8.8 built for i486-linux-gnu-thread-multi
> > на Дебиане - не воспроизводится.
>
> Воспроизвелось на CentOS 5.2:
> v5.8.8 built for i386-linux-thread-multi
>
> Казалось бы, в чём отличие ?
Патч для 0.7.51.
Желательно проверить сборку и работу на разных платформах с имеющимся
там перлом - threaded или non-threaded. Для проверки работы достаточно
просто запустить nginx сделать ему пару раз -HUP, а потом остановить.
--
Игорь Сысоев
http://sysoev.ru
Index: src/http/ngx_http_config.h
===================================================================
--- src/http/ngx_http_config.h (revision 2032)
+++ src/http/ngx_http_config.h (working copy)
@@ -69,8 +69,10 @@
((ngx_http_conf_ctx_t *) cf->ctx)->loc_conf[module.ctx_index]
#define ngx_http_cycle_get_module_main_conf(cycle, module) - ((ngx_http_conf_ctx_t *) - cycle->conf_ctx[ngx_http_module.index])->main_conf[module.ctx_index]
+ (cycle->conf_ctx[ngx_http_module.index] ? + ((ngx_http_conf_ctx_t *) cycle->conf_ctx[ngx_http_module.index]) + ->main_conf[module.ctx_index]: + NULL)
#endif /* _NGX_HTTP_CONFIG_H_INCLUDED_ */
Index: src/http/modules/perl/ngx_http_perl_module.c
===================================================================
--- src/http/modules/perl/ngx_http_perl_module.c (revision 2032)
+++ src/http/modules/perl/ngx_http_perl_module.c (working copy)
@@ -154,11 +154,15 @@
#endif
-static ngx_str_t ngx_null_name = ngx_null_string;
+static ngx_str_t ngx_null_name = ngx_null_string;
+static HV *nginx_stash;
-static HV *nginx_stash;
+#if (NGX_HAVE_PERL_MULTIPLICITY)
+static ngx_uint_t ngx_perl_term;
+#endif
+
static void
ngx_http_perl_xs_init(pTHX)
{
@@ -821,6 +825,10 @@
(void) perl_destruct(perl);
perl_free(perl);
+
+ if (ngx_perl_term) {
+ PERL_SYS_TERM();
+ }
}
#endif
@@ -1041,15 +1049,13 @@
pmcf = ngx_http_cycle_get_module_main_conf(cycle, ngx_http_perl_module);
- {
+ if (pmcf) {
+ dTHXa(pmcf->perl);
+ PERL_SET_CONTEXT(pmcf->perl);
- dTHXa(pmcf->perl);
- PERL_SET_CONTEXT(pmcf->perl);
+ /* set worker's $$ */
- /* set worker's $$ */
-
- sv_setiv(GvSV(gv_fetchpv("$", TRUE, SVt_PV)), (I32) ngx_pid);
-
+ sv_setiv(GvSV(gv_fetchpv("$", TRUE, SVt_PV)), (I32) ngx_pid);
}
return NGX_OK;
@@ -1059,16 +1065,15 @@
static void
ngx_http_perl_exit(ngx_cycle_t *cycle)
{
- ngx_http_perl_main_conf_t *pmcf;
+#if (NGX_HAVE_PERL_MULTIPLICITY)
- pmcf = ngx_http_cycle_get_module_main_conf(cycle, ngx_http_perl_module);
+ ngx_perl_term = 1;
- {
+#else
- dTHXa(pmcf->perl);
- PERL_SET_CONTEXT(pmcf->perl);
+ if (nginx_stash) {
+ PERL_SYS_TERM();
+ }
- PERL_SYS_TERM();
-
- }
+#endif
}
|