[2673] in BarnOwl Developers

home help back first fref pref prev next nref lref last post

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
> 
> 

home help back first fref pref prev next nref lref last post