Mail::SpamAssassin::Timeout.3pm

Langue: en

Version: 2008-06-10 (debian - 07/07/09)

Section: 3 (Bibliothèques de fonctions)

NAME

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

SYNOPSIS

     # non-timeout code...
 
     my $t = Mail::SpamAssassin::Timeout->new({ secs => 5 });
     
     $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
timeout, in seconds. Optional; if not specified, no timeouts will be applied.
$t->run($coderef)
Run a code reference within the currently-defined timeout.

The timeout is as defined by the secs parameter 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.

$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 reset to its starting value.