Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision bcc99615

Von Moritz Bunkus vor mehr als 8 Jahren hinzugefügt

  • ID bcc99615a523f4c1816a71c823c39dc7a9f198ba
  • Vorgänger 24f6b9ed
  • Nachfolger 09479f02

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.

Unterschiede anzeigen:

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