- $mpd->loop->add(
- IO::Async::Signal->new(
- name => 'INT',
- on_receipt => sub {
- $log->debug("SIGINT 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');
+
+ 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,
+ )
+ );
+ }