1 package Stem::Event::Signal ;
3 use Stem::Event::Queue ;
9 our @EXPORT = qw( process_signal_queue ) ;
11 # this generic signal event code needs the safe signals of perl 5.8+
20 # this sub will cache the handler closures so we can reuse them.
26 my $signal = $self->{'signal'} ;
28 $self->{'method'} ||= "sig_\L${signal}_handler" ;
30 # create the signal event handler and cache it.
31 # we cache them so we can reuse these closures and never leak
33 $SIG{ $signal } = $cached_handlers{$signal} ||=
35 <<<<<<< HEAD:lib/Stem/Event/Signal.pm
36 Stem::Event::Queue::queue_has_event() ;
38 #print "HIT $signal\n";
40 print "HIT $signal\n";
41 Stem::Event::Queue::mark_not_empty() ;
42 >>>>>>> master:lib/Stem/Event/Signal.pm
43 push @signal_queue, $signal
46 # track the event object for this signal
48 $signal2event{$signal} = $self ;
50 #print "$signal = $SIG{ $signal }\n" ;
52 # make sure the event queue is set up so we can handle signals in the
55 Stem::Event::Queue::_init_event_queue() ;
64 $SIG{ $self->{'signal'} } = 'DEFAULT' ;
69 sub process_signal_queue {
71 my $sig_count = @signal_queue ;
73 #print "PROCESS SIGNAL Q $sig_count\n" ;
75 # return if we have no pending signals
77 return $sig_count unless $sig_count ;
79 while( my $signal = shift @signal_queue ) {
81 my $event = $signal2event{ $signal } ;
84 next unless $event->{'active'} ;