X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;ds=inline;f=lib%2FApp%2FMPD%2FFeeder.pm;h=2381689a20d4f6dd555b3c1e517562809568a555;hb=4404a46e92de24d8f6db57109c62be71ffbd47be;hp=1b5ed30e5bb36f82a8a39c33b664c8f2838d2ae4;hpb=b4924aa496dece6edca9d4c3eb598b1850b6499f;p=mpd-feeder.git diff --git a/lib/App/MPD/Feeder.pm b/lib/App/MPD/Feeder.pm index 1b5ed30..2381689 100644 --- a/lib/App/MPD/Feeder.pm +++ b/lib/App/MPD/Feeder.pm @@ -3,6 +3,7 @@ package App::MPD::Feeder; use strict; use warnings; use utf8; +use feature 'state'; use App::MPD::Feeder::Options; use App::MPD::Feeder::DB; @@ -20,7 +21,7 @@ class App::MPD::Feeder { has $cfg_file :reader; has $opt :reader; has $db :reader; - has $db_needs_update = 1; + has $db_needs_update :writer = 1; has $mpd :reader; use constant DEFAULT_CONFIG_FILE => '/etc/mpd-feeder/mpd-feeder.conf'; @@ -60,31 +61,33 @@ use constant DEFAULT_CONFIG_FILE => '/etc/mpd-feeder/mpd-feeder.conf'; $mpd = Net::Async::MPD->new(%conn); - $mpd->loop->add( - IO::Async::Signal->new( - name => 'TERM', - on_receipt => sub { - $log->debug("SIGTERM received. Stopping loop"); - $mpd->loop->stop('quit'); - }, - ) - ); + my $int_signal_handler = sub { + state $signal_count = 0; + $signal_count++; + $log->debug("Signal received. Stopping loop"); + $mpd->loop->stop('quit'); - $mpd->loop->add( - IO::Async::Signal->new( - name => 'INT', - on_receipt => sub { - $log->debug("SIGINT received. Stopping loop"); - $mpd->loop->stop('quit'); - }, - ) - ); + if ( $signal_count > 1 ) { + $log->warn("Another signal received (#$signal_count)"); + $log->warn("Exiting abruptly"); + exit 2; + } + }; + + for (qw(TERM INT)) { + $mpd->loop->add( + IO::Async::Signal->new( + name => $_, + on_receipt => $int_signal_handler, + ) + ); + } $mpd->loop->add( IO::Async::Signal->new( name => 'HUP', on_receipt => sub { - $log->debug("SIGHUP received. Stopping loop"); + $log->debug("SIGHUP received. Scheduling reload"); $mpd->loop->stop('reload'); }, )