From 7a5ef2ffc002e7976fae34d08f296ace993211c8 Mon Sep 17 00:00:00 2001
From: Guilhem Moulin <guilhem@fripost.org>
Date: Thu, 30 Jul 2015 01:39:30 +0200
Subject: Log out before exiting.

---
 lib/Net/IMAP/Sync.pm | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

(limited to 'lib')

diff --git a/lib/Net/IMAP/Sync.pm b/lib/Net/IMAP/Sync.pm
index 2a25720..47c6258 100644
--- a/lib/Net/IMAP/Sync.pm
+++ b/lib/Net/IMAP/Sync.pm
@@ -380,7 +380,7 @@ sub new($%) {
 sub DESTROY($) {
     my $self = shift;
     foreach (qw/STDIN STDOUT/) {
-        $self->{$_}->close()  if defined $self->{$_}  and $self->{$_}->opened();
+        $self->{$_}->close() if defined $self->{$_} and $self->{$_}->opened();
     }
 }
 
@@ -490,7 +490,8 @@ sub examine($$) {
 #   Issue a LOGOUT command.  Change the state to LOGOUT.
 sub logout($) {
     my $self = shift;
-    $self->_send('LOGOUT');
+    # don't bother if the connection is already closed
+    $self->_send('LOGOUT') if $self->{STDIN}->opened();
     $self->{_STATE} = 'LOGOUT';
     undef $self;
 }
@@ -1100,10 +1101,15 @@ sub _getline($;$) {
     my $self = shift;
     my $msg = shift // '';
 
-    my $x = $self->{STDOUT}->getline() // $self->panic("Can't read: $!");
-    $x =~ s/\r\n\z// or $self->panic($x);
-    $self->logger("S: $msg", $x) if $self->{debug};
-    return $x;
+    if ($self->{STDOUT}->opened()) {
+        my $x = $self->{STDOUT}->getline() // $self->panic("Can't read: $!");
+        $x =~ s/\r\n\z// or $self->panic($x);
+        $self->logger("S: $msg", $x) if $self->{debug};
+        return $x;
+    }
+    else {
+        undef $self;
+    }
 }
 
 
@@ -1452,10 +1458,7 @@ sub _resp($$;$$$) {
 
     if (s/\A\* //) {
         if (s/\ABYE //) {
-            foreach (qw/STDIN STDOUT/) {
-                $self->{$_}->close() if defined $self->{$_} and $self->{$_}->opened();
-            }
-            exit 0;
+            undef $self;
         }
         elsif (s/\A(?:OK|NO|BAD) //) {
             $self->_resp_text($_);
-- 
cgit v1.2.3