[2675] in BarnOwl Developers
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
>>
>>
>