Возникла у меня такая проблема:
Имеется достаточно сложная система скриптов на mod_perl, в которой
Perl*Handler вешаются на самые различные стадии запроса
(в частности PerlTransHandler и PerlFixupHandler, а отдачей контента
занимается либо PerlSSI, либо Registry скрипты).
При этом в Fixup-хэндлере для PerlSSI-страниц создается объект CGI,
который живет в глобальной переменной модуля, и используется в
соответствующих вызовах <!--#perl sub.
Некоторое время все это жило и каши не просило, но вдруг (после
глобального переписывания) был замечен такой эффект, что
нечто (как правило параметр запроса) переживает текущий http запрос
и в результате если Registry скрипт случайно обрабатывается копией httpd
где все это живет, поведение его совершенно непредсказуемо.
При этом вполне существует CleanupHandler, который undef-ит все глобальные
переменные моих модулей.
CGI в FixUp хэндлере создается следующим образом:
sub FixUp {
my $r = shift;
local %ENV = $r->cgi_env;
&init_context;
}
sub init_context {
@Module::CGI[0]=new CGI;
... много разной другой инициализации
}
Попытка заменить local %ENV
на
my %oldenv = %ENV;
%ENV = $r->cgi_env;
&init_context
%ENV=%oldenv
положение сильно не улучшила.
Особые проблемы вызывает скрипт с multipart-формой, точнее с двумя формами
- одной get, второй multipart.
Из скрипта вызывается та же самая функция init_context, но с
использованием того Environment, который предоставляет Registry.
Поведение устойчивое. Пробовались Apache 1.3.4 и 1.3.6 mod_perl 1.16_01 и
1.19 в разных конфигурациях.
У кого нибудь есть какие-нибудь идеи?
Да, кстати. В Apache 1.2 была опция -x которая заставляла сервер
работать в foreground и без форканья, что сильно упрощало отладку подобных
вещей. В 1.3.4 и 1,3.6 сие куда-то испарилось.
--------------------------------------------------
Victor Wagner vitus@xxxxxx
Programmer Office:7-(095)-964-0380
Institute for Commerce Home: 7-(095)-135-46-61
Engineering http://www.ice.ru/~vitus
=============================================================================
= Apache-Talk@xxxxxxxxxxxxx mailing list =
Mail "unsubscribe apache-talk" to majordomo@xxxxxxxxxxxxx if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.