]> git.g-eek.se Git - interimap.git/commitdiff
Log out before exiting.
authorGuilhem Moulin <guilhem@fripost.org>
Wed, 29 Jul 2015 23:39:30 +0000 (01:39 +0200)
committerGuilhem Moulin <guilhem@fripost.org>
Wed, 29 Jul 2015 23:39:30 +0000 (01:39 +0200)
imapsync
lib/Net/IMAP/Sync.pm

index 45b214fddb00f78fda0ad02c32346ca2f13c0000..b0226c377ad9461ce990de13704dd45823d4f7af 100755 (executable)
--- a/imapsync
+++ b/imapsync
@@ -1111,4 +1111,7 @@ while(1) {
     wait_notifications(900);
 }
 
-END { cleanup(); }
+END {
+    $_->logout() foreach grep defined, ($lIMAP, $rIMAP);
+    cleanup();
+}
index 2a2572047d3e39e38a88ec269699cba5672d36c6..47c62583166d80a21f1e788d84ee50ca3e32391b 100644 (file)
@@ -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($_);