#!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if 0; # not running under some shell use strict; use CGI; use Bio::Graphics::Browser2; use Bio::Graphics::Browser2::Render::HTML; umask 022; my $fcgi = Bio::Graphics::Browser2::Render->fcgi_request; my $init; if ($fcgi) { my $FCGI_DONE = 0; $SIG{USR1} = $SIG{PIPE} = $SIG{TERM} = sub { my $sig = shift; my $time = localtime; print STDERR "[$time] [notice] GBrowse FastCGI process caught sig$sig. Exiting... (pid $$)\n"; $FCGI_DONE = 1; }; my %sys_env = %ENV; while (!$FCGI_DONE) { my $status = $fcgi->Accept; next unless $status >= 0; %ENV = (%sys_env, %ENV); my $globals = Bio::Graphics::Browser2->open_globals; CGI->initialize_globals(); my $render = Bio::Graphics::Browser2::Render::HTML->new($globals); eval { local $SIG{PIPE} = sub {die "pipe"}; $render->run(); }; warn $@ if $@; $render->destroy; } my $pgrp = getpgrp(); kill TERM => -$pgrp; } else { $SIG{TERM} = sub { warn "gbrowse going down..."; CORE::exit 0 }; my $globals = Bio::Graphics::Browser2->open_globals; Bio::Graphics::Browser2::Render::HTML->new($globals)->run(); } exit 0;