From a1e9b7f5383271231321a388067238b44339e5ae Mon Sep 17 00:00:00 2001 From: Elijah Perrault Date: Thu, 10 Feb 2011 14:17:18 -0700 Subject: [PATCH] Moved signal handlers to Lib::Auto. --- bin/auto | 80 ++++--------------------------------------------- doc/CHANGELOG | 1 + lib/Lib/Auto.pm | 78 ++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 83 insertions(+), 76 deletions(-) diff --git a/bin/auto b/bin/auto index 0fef98f..f2f8fcf 100755 --- a/bin/auto +++ b/bin/auto @@ -86,11 +86,11 @@ if ($BFVER[0] ne VER.q{.}.SVER.q{.}.REV.RSTAGE."\n") { undef @BFVER; # Set signal handlers. -local $SIG{TERM} = \&signal_term; -local $SIG{INT} = \&signal_int; -local $SIG{HUP} = \&signal_hup; -local $SIG{'__WARN__'} = \&signal_perlwarn; -local $SIG{'__DIE__'} = \&signal_perldie; +local $SIG{TERM} = \&Lib::Auto::signal_term; +local $SIG{INT} = \&Lib::Auto::signal_int; +local $SIG{HUP} = \&Lib::Auto::signal_hup; +local $SIG{'__WARN__'} = \&Lib::Auto::signal_perlwarn; +local $SIG{'__DIE__'} = \&Lib::Auto::signal_perldie; API::Std::event_add('on_sigterm'); API::Std::event_add('on_sigint'); API::Std::event_add('on_sighup'); @@ -449,74 +449,4 @@ sub mod_load { return 0; } - -## Signal handlers - -# SIGTERM -sub signal_term -{ - API::Std::event_run('on_sigterm'); - foreach (keys %SOCKET) { API::IRC::quit($_, 'Caught SIGTERM'); } - $DB->disconnect; - dbug '!!! Caught SIGTERM; terminating...'; - alog '!!! Caught SIGTERM; terminating...'; - if (-e "$Bin/auto.pid") { - unlink "$Bin/auto.pid"; - } - sleep 1; - exit; -} - -# SIGINT -sub signal_int -{ - API::Std::event_run('on_sigint'); - foreach (keys %SOCKET) { API::IRC::quit($_, 'Caught SIGINT'); } - $DB->disconnect; - dbug '!!! Caught SIGINT; terminating...'; - alog '!!! Caught SIGINT; terminating...'; - if (-e "$Bin/auto.pid") { - unlink "$Bin/auto.pid"; - } - sleep 1; - exit; -} - -# SIGHUP -sub signal_hup -{ - API::Std::event_run('on_sighup'); - dbug '!!! Caught SIGHUP but rehash is unavailable; ignoring'; - alog '!!! Caught SIGHUP but rehash is unavailable; ignoring'; - return 1; -} - -# __WARN__ -sub signal_perlwarn -{ - my ($warnmsg) = @_; - $warnmsg =~ s/(\n|\r)//xsmg; - alog 'Perl Warning: '.$warnmsg; - if ($DEBUG) { println 'Perl Warning: '.$warnmsg; } - return 1; -} - -# __DIE__ -sub signal_perldie -{ - my ($diemsg) = @_; - $diemsg =~ s/(\n|\r)//xsmg; - - return if $EXCEPTIONS_BEING_CAUGHT; - alog 'Perl Fatal: '.$diemsg.' -- Terminating program!'; - foreach (keys %SOCKET) { API::IRC::quit($_, 'A fatal error occurred!'); } - $DB->disconnect; - if (-e "$Bin/auto.pid") { - unlink "$Bin/auto.pid"; - } - sleep 1; - println 'FATAL: '.$diemsg; - exit; -} - # vim: set ai sw=4 ts=4: diff --git a/doc/CHANGELOG b/doc/CHANGELOG index a0f5562..17f9ecf 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -3,6 +3,7 @@ Auto IRC Bot 3.0: Change Log 3.0 Indev ================================================================== + * Moved signal handlers to Lib::Auto. * Renamed src/ to lib/. * Switched from Auto-Flatfile to SQLite for database backend. * Added a Badwords module. diff --git a/lib/Lib/Auto.pm b/lib/Lib/Auto.pm index 4858c81..cfaa09d 100644 --- a/lib/Lib/Auto.pm +++ b/lib/Lib/Auto.pm @@ -4,7 +4,8 @@ package Lib::Auto; use strict; use warnings; -use API::Log qw(println); +use English qw(-no_match_vars); +use API::Log qw(println dbug alog); our $VERSION = 3.000000; # Update checker. @@ -39,3 +40,78 @@ sub checkver } } } + +################### +# Signal handlers # +################### + +# SIGTERM +sub signal_term +{ + API::Std::event_run('on_sigterm'); + foreach (keys %Auto::SOCKET) { API::IRC::quit($_, 'Caught SIGTERM'); } + $Auto::DB->disconnect; + dbug '!!! Caught SIGTERM; terminating...'; + alog '!!! Caught SIGTERM; terminating...'; + if (-e "$Auto::Bin/auto.pid") { + unlink "$Auto::Bin/auto.pid"; + } + sleep 1; + exit; +} + +# SIGINT +sub signal_int +{ + API::Std::event_run('on_sigint'); + foreach (keys %Auto::SOCKET) { API::IRC::quit($_, 'Caught SIGINT'); } + $Auto::DB->disconnect; + dbug '!!! Caught SIGINT; terminating...'; + alog '!!! Caught SIGINT; terminating...'; + if (-e "$Auto::Bin/auto.pid") { + unlink "$Auto::Bin/auto.pid"; + } + sleep 1; + exit; +} + +# SIGHUP +sub signal_hup +{ + API::Std::event_run('on_sighup'); + dbug '!!! Caught SIGHUP but rehash is unavailable; ignoring'; + alog '!!! Caught SIGHUP but rehash is unavailable; ignoring'; + return 1; +} + +# __WARN__ +sub signal_perlwarn +{ + my ($warnmsg) = @_; + $warnmsg =~ s/(\n|\r)//xsmg; + alog 'Perl Warning: '.$warnmsg; + if ($Auto::DEBUG) { println 'Perl Warning: '.$warnmsg; } + return 1; +} + +# __DIE__ +sub signal_perldie +{ + my ($diemsg) = @_; + $diemsg =~ s/(\n|\r)//xsmg; + + return if $EXCEPTIONS_BEING_CAUGHT; + alog 'Perl Fatal: '.$diemsg.' -- Terminating program!'; + foreach (keys %Auto::SOCKET) { API::IRC::quit($_, 'A fatal error occurred!'); } + $Auto::DB->disconnect; + if (-e "$Auto::Bin/auto.pid") { + unlink "$Auto::Bin/auto.pid"; + } + sleep 1; + println 'FATAL: '.$diemsg; + exit; +} + + +1; +# vim: set ai sw=4 ts=4: