Revision bcc99615
Von Moritz Bunkus vor mehr als 8 Jahren hinzugefügt
SL/Dispatcher.pm | ||
---|---|---|
41 | 41 |
use SL::Template::Plugin::HTMLFixes; |
42 | 42 |
use SL::User; |
43 | 43 |
|
44 |
use Rose::Object::MakeMethods::Generic ( |
|
45 |
scalar => [ qw(restart_after_request) ], |
|
46 |
); |
|
47 |
|
|
44 | 48 |
# Trailing new line is added so that Perl will not add the line |
45 | 49 |
# number 'die' was called in. |
46 | 50 |
use constant END_OF_REQUEST => "END-OF-REQUEST\n"; |
... | ... | |
226 | 230 |
sub handle_all_requests { |
227 | 231 |
my ($self) = @_; |
228 | 232 |
|
229 |
my $restart; |
|
230 | 233 |
my $request = FCGI::Request(); |
231 | 234 |
while ($request->Accept() >= 0) { |
232 | 235 |
$self->handle_request($request); |
233 |
if (($self->interface_type eq 'FastCGI') && _memory_usage_is_too_high()) { |
|
234 |
$request->LastCall(); |
|
235 |
$restart = 1; |
|
236 |
} |
|
236 |
|
|
237 |
$self->restart_after_request(1) if $self->_interface_is_fcgi && $self->_memory_usage_is_too_high; |
|
238 |
$request->LastCall if $self->restart_after_request; |
|
237 | 239 |
} |
238 | 240 |
|
239 |
exec $0 if $restart;
|
|
241 |
exec $0 if $self->restart_after_request;
|
|
240 | 242 |
} |
241 | 243 |
|
242 | 244 |
sub handle_request { |
... | ... | |
479 | 481 |
my $ok = all { (stat($_))[9] == $fcgi_file_cache{$_} } keys %fcgi_file_cache; |
480 | 482 |
return if $ok; |
481 | 483 |
$::lxdebug->message(LXDebug::DEBUG1(), "Program modifications detected. Restarting."); |
482 |
exit;
|
|
484 |
$self->restart_after_request(1);
|
|
483 | 485 |
} |
484 | 486 |
|
485 | 487 |
sub get_standard_filehandles { |
Auch abrufbar als: Unified diff
Dispatcher: FCGI-Neustart bei modifizierten Dateien via exec anstelle von exit
Gleicher Grund wie in 655f9081d19d201a1084a609beca1c06bef91e5c:
Wenn sich das Script beendet, so kann es sein, dass der Webserver
bereits den nächsten Request zum Script geschickt hat. Ist das der Fall,
kommt es zu einem internal server error für den User.
Statt dessen kann sich das Script selber ausführen. Dadurch werden die
Kommunikationskanäle zwischen Webserver und Script (STDIN, STDOUT,
STDERR) aufrechterhalten.