ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА














     АРХИВ :: Apache-Talk
Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[apache-talk] =?koi8-r?Q?=F3=D4=D2=C1=CE=CE=CF=C5_=D0=CF=D7=C5=C4=C5=CE=C9=C5_mod?==?koi8-r?Q?=5Fperl?=



Возникла у меня такая проблема:

Имеется достаточно сложная система скриптов на 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@ice.ru
Programmer                      Office:7-(095)-964-0380
Institute for Commerce          Home: 7-(095)-135-46-61
Engineering                     http://www.ice.ru/~vitus

=============================================================================
=               Apache-Talk@lists.lexa.ru mailing list                      =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
=       Archive avaliable at http://www.lexa.ru/apache-talk                 =



 




Copyright © Lexa Software, 1996-2009.