[2675] 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 (David A Benjamin)
Sat Sep 25 18:26:36 2010

Date: Sat, 25 Sep 2010 18:26:30 -0400 (EDT)
From: David A Benjamin <davidben@MIT.EDU>
To: Nelson Elhage <nelhage@mit.edu>
cc: barnowl-dev@mit.edu
In-Reply-To: <87aan57a6f.fsf@mit.edu>

jhawk noted on -c sipb that his 1.6.3 barnowl was using a non-trivial 
percentage of CPU. Other than the dummy 1/second compatibility timer and 
some uninteresting AIM timers that fire every 2 minutes, I'm not aware of 
any improvements in this area in master, so I thought it might have been a 
leak. May as well be paranoid here. :-)

David

On Sat, 25 Sep 2010, Nelson Elhage wrote:

> 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