[2667] in BarnOwl Developers

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

[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


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