


Mail::SpamAssasUser:Contributed PeMail::SpamAssassin::Timeout(3p)


NAME
       Mail::SpamAssassin::Timeout - safe, reliable timeouts in perl

SYNOPSIS
           # non-timeout code...

           my $t = Mail::SpamAssassin::Timeout->new({ secs => 5, deadline => $when });

           $t->run(sub {
               # code to run with a 5-second timeout...
           });

           if ($t->timed_out()) {
               # do something...
           }

           # more non-timeout code...

DESCRIPTION
       This module provides a safe, reliable and clean API to provide
       alarm(2)-based timeouts for perl code.

       Note that $SIG{ALRM} is used to provide the timeout, so this will not
       interrupt out-of-control regular expression matches.

       Nested timeouts are supported.

PUBLIC METHODS
       my $t = Mail::SpamAssassin::Timeout->new({ ... options ... });
           Constructor.  Options include:

           secs => $seconds
               time interval, in seconds. Optional; if neither "secs" nor
               "deadline" is specified, no timeouts will be applied.

           deadline => $unix_timestamp
               Unix timestamp (seconds since epoch) when a timeout is reached
               in the latest.  Optional; if neither secs nor deadline is
               specified, no timeouts will be applied. If both are specified,
               the shorter interval of the two prevails.

       $t->run($coderef)
           Run a code reference within the currently-defined timeout.

           The timeout is as defined by the secs and deadline parameters to
           the constructor.

           Returns whatever the subroutine returns, or "undef" on timeout.  If
           the timer times out, "$t-<gt"timed_out()> will return 1.

           Time elapsed is not cumulative; multiple runs of "run" will restart
           the timeout from scratch. On the other hand, nested timers do
           observe outer timeouts if they are shorter, resignalling a timeout
           to the level which established them, i.e. code running under an



perl v5.12.2                2010-03-16                          1





Mail::SpamAssasUser:Contributed PeMail::SpamAssassin::Timeout(3p)


           inner timer can not exceed the time limit established by an outer
           timer. When restarting an outer timer on return, elapsed time of a
           running code is taken into account.

       $t->run_and_catch($coderef)
           Run a code reference, as per "$t-<gt"run()>, but also catching any
           "die()" calls within the code reference.

           Returns "undef" if no "die()" call was executed and $@ was unset,
           or the value of $@ if it was set.  (The timeout event doesn't count
           as a "die()".)

       $t->timed_out()
           Returns 1 if the most recent code executed in "run()" timed out, or
           "undef" if it did not.

       $t->reset()
           If called within a "run()" code reference, causes the current alarm
           timer to be restored to its original setting (useful after our
           alarm setting was clobbered by some underlying module).





































perl v5.12.2                2010-03-16                          2


