/usr/share/perl5/IO/Async/Signal.pm is in libio-async-perl 0.64-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | # You may distribute under the terms of either the GNU General Public License
# or the Artistic License (the same terms as Perl itself)
#
# (C) Paul Evans, 2009-2011 -- leonerd@leonerd.org.uk
package IO::Async::Signal;
use strict;
use warnings;
use base qw( IO::Async::Notifier );
our $VERSION = '0.64';
use Carp;
=head1 NAME
C<IO::Async::Signal> - event callback on receipt of a POSIX signal
=head1 SYNOPSIS
use IO::Async::Signal;
use IO::Async::Loop;
my $loop = IO::Async::Loop->new;
my $signal = IO::Async::Signal->new(
name => "HUP",
on_receipt => sub {
print "I caught SIGHUP\n";
},
);
$loop->add( $signal );
$loop->run;
=head1 DESCRIPTION
This subclass of L<IO::Async::Notifier> invokes its callback when a particular
POSIX signal is received.
Multiple objects can be added to a C<Loop> that all watch for the same signal.
The callback functions will all be invoked, in no particular order.
=cut
=head1 EVENTS
The following events are invoked, either using subclass methods or CODE
references in parameters:
=head2 on_receipt
Invoked when the signal is received.
=cut
=head1 PARAMETERS
The following named parameters may be passed to C<new> or C<configure>:
=head2 name => STRING
The name of the signal to watch. This should be a bare name like C<TERM>. Can
only be given at construction time.
=head2 on_receipt => CODE
CODE reference for the C<on_receipt> event.
Once constructed, the C<Signal> will need to be added to the C<Loop> before it
will work.
=cut
sub _init
{
my $self = shift;
my ( $params ) = @_;
my $name = delete $params->{name} or croak "Expected 'name'";
$name =~ s/^SIG//; # Trim a leading "SIG"
$self->{name} = $name;
$self->SUPER::_init( $params );
}
sub configure
{
my $self = shift;
my %params = @_;
if( exists $params{on_receipt} ) {
$self->{on_receipt} = delete $params{on_receipt};
undef $self->{cb}; # Will be lazily constructed when needed
if( my $loop = $self->loop ) {
$self->_remove_from_loop( $loop );
$self->_add_to_loop( $loop );
}
}
unless( $self->can_event( 'on_receipt' ) ) {
croak 'Expected either a on_receipt callback or an ->on_receipt method';
}
$self->SUPER::configure( %params );
}
sub _add_to_loop
{
my $self = shift;
my ( $loop ) = @_;
$self->{cb} ||= $self->make_event_cb( 'on_receipt' );
$self->{id} = $loop->attach_signal( $self->{name}, $self->{cb} );
}
sub _remove_from_loop
{
my $self = shift;
my ( $loop ) = @_;
$loop->detach_signal( $self->{name}, $self->{id} );
undef $self->{id};
}
sub notifier_name
{
my $self = shift;
if( length( my $name = $self->SUPER::notifier_name ) ) {
return $name;
}
return $self->{name};
}
=head1 AUTHOR
Paul Evans <leonerd@leonerd.org.uk>
=cut
0x55AA;
|