[2673] in BarnOwl Developers
Re: [PATCH] More aggressively stop Timers created in perl
daemon@ATHENA.MIT.EDU (Nelson Elhage)
Sat Sep 25 18:03:40 2010
From: Nelson Elhage <nelhage@MIT.EDU>
To: David Benjamin <davidben@mit.edu>, barnowl-dev@mit.edu
In-Reply-To: <1285364251-16548-1-git-send-email-davidben@mit.edu>
Date: Sat, 25 Sep 2010 18:03:36 -0400
lgtm. Is this just paranoia, or do you have reason to believe we're
still leaking timers?
On Fri, 24 Sep 2010 17:37:31 -0400, David Benjamin <davidben@MIT.EDU> wrote:
> In case something leaks with references or whatever, at least we don't
> leak timers.
> ---
> perl/lib/BarnOwl/MainLoopCompatHook.pm | 5 +++++
> .../IRC/lib/BarnOwl/Module/IRC/Connection.pm | 6 ++++++
> perl/modules/Jabber/lib/BarnOwl/Module/Jabber.pm | 3 +++
> .../Twitter/lib/BarnOwl/Module/Twitter/Handle.pm | 10 ++++++++++
> 4 files changed, 24 insertions(+), 0 deletions(-)
>
> diff --git a/perl/lib/BarnOwl/MainLoopCompatHook.pm b/perl/lib/BarnOwl/MainLoopCompatHook.pm
> index 225fc1b..d42df25 100644
> --- a/perl/lib/BarnOwl/MainLoopCompatHook.pm
> +++ b/perl/lib/BarnOwl/MainLoopCompatHook.pm
> @@ -36,6 +36,11 @@ sub clear {
> $self->{hook}->clear();
> }
>
> +sub DESTROY {
> + my $self = shift;
> + $self->clear();
> +}
> +
> sub _ensure_timer {
> my $self = shift;
> BarnOwl::debug("Enabling backwards-compatibility \"main loop\" hook");
> diff --git a/perl/modules/IRC/lib/BarnOwl/Module/IRC/Connection.pm b/perl/modules/IRC/lib/BarnOwl/Module/IRC/Connection.pm
> index d902260..e4b30e2 100644
> --- a/perl/modules/IRC/lib/BarnOwl/Module/IRC/Connection.pm
> +++ b/perl/modules/IRC/lib/BarnOwl/Module/IRC/Connection.pm
> @@ -318,6 +318,9 @@ sub schedule_reconnect {
> $BarnOwl::Module::IRC::reconnect{$self->alias} = $self;
> my $weak = $self;
> weaken($weak);
> + if (defined $self->{reconnect_timer}) {
> + $self->{reconnect_timer}->stop;
> + }
> $self->{reconnect_timer} =
> BarnOwl::Timer->new( {
> after => $interval,
> @@ -330,6 +333,9 @@ sub schedule_reconnect {
> sub cancel_reconnect {
> my $self = shift;
> delete $BarnOwl::Module::IRC::reconnect{$self->alias};
> + if (defined $self->{reconnect_timer}) {
> + $self->{reconnect_timer}->stop;
> + }
> delete $self->{reconnect_timer};
> }
>
> diff --git a/perl/modules/Jabber/lib/BarnOwl/Module/Jabber.pm b/perl/modules/Jabber/lib/BarnOwl/Module/Jabber.pm
> index 99c869b..e2b5931 100644
> --- a/perl/modules/Jabber/lib/BarnOwl/Module/Jabber.pm
> +++ b/perl/modules/Jabber/lib/BarnOwl/Module/Jabber.pm
> @@ -111,6 +111,9 @@ $BarnOwl::Hooks::startup->add("BarnOwl::Module::Jabber::onStart");
> sub do_keep_alive_and_auto_away {
> if ( !$conn->connected() ) {
> # We don't need this timer any more.
> + if (defined $vars{keepAliveTimer}) {
> + $vars{keepAliveTimer}->stop;
> + }
> delete $vars{keepAliveTimer};
> return;
> }
> diff --git a/perl/modules/Twitter/lib/BarnOwl/Module/Twitter/Handle.pm b/perl/modules/Twitter/lib/BarnOwl/Module/Twitter/Handle.pm
> index 353f857..cba4d33 100644
> --- a/perl/modules/Twitter/lib/BarnOwl/Module/Twitter/Handle.pm
> +++ b/perl/modules/Twitter/lib/BarnOwl/Module/Twitter/Handle.pm
> @@ -149,6 +149,16 @@ sub sleep {
> my $weak = $self;
> weaken($weak);
>
> + # Stop any existing timers.
> + if (defined $self->{timer}) {
> + $self->{timer}->stop;
> + $self->{timer} = undef;
> + }
> + if (defined $self->{direct_timer}) {
> + $self->{direct_timer}->stop;
> + $self->{direct_timer} = undef;
> + }
> +
> if($self->{cfg}->{poll_for_tweets}) {
> $self->{timer} = BarnOwl::Timer->new({
> after => $delay,
> --
> 1.7.3.1.g716de
>
>