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-<gttimed_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-<gtrun()>, 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.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 50:

=over without closing =back