[2667] in BarnOwl Developers
[PATCH] More aggressively stop Timers created in perl
daemon@ATHENA.MIT.EDU (David Benjamin)
Fri Sep 24 17:38:00 2010
From: David Benjamin <davidben@MIT.EDU>
To: barnowl-dev@mit.edu
Date: Fri, 24 Sep 2010 17:37:31 -0400
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