# -*- mode: perl; coding: utf-8 -*-
package YATT::Toplevel::FCGI;
use strict;
use warnings FATAL => qw(all);

BEGIN {require Exporter; *import = \&Exporter::import}

use base qw(YATT::Toplevel::CGI);
use YATT::Toplevel::CGI;
use YATT::Exception;

use FCGI;
use YATT::Util;

#========================================

sub run {
  my ($pack, $request) = splice @_, 0, 2;
  my $config = $pack->new_config(@_);
  my $age = -M $0;
  $request = FCGI::Request() unless defined $request;
  while ($request->Accept >= 0) {
    my $rc = catch {
      $pack->SUPER::run('cgi', undef, $config);
    } \ my $error;
    if ($rc and my ($file, $newcgi) = can_retry($error)) {
      $pack->run_retry_max(3, $config, $file, $newcgi);
    }
    $request->Finish;
    last if -e $0 and -M $0 < $age;
  }
}

sub plain_exit { shift->bye }

1;
