diff options
| author | Guilhem Moulin <guilhem@fripost.org> | 2015-07-30 01:39:30 +0200 | 
|---|---|---|
| committer | Guilhem Moulin <guilhem@fripost.org> | 2015-07-30 01:39:30 +0200 | 
| commit | 7a5ef2ffc002e7976fae34d08f296ace993211c8 (patch) | |
| tree | 07a543b4d09845bf2946d9b7b23a9436e1a276fc /lib/Net/IMAP/Sync.pm | |
| parent | 7f7a29ef79915a86d3f5bd3533e3a49ac6f36cb6 (diff) | |
Log out before exiting.
Diffstat (limited to 'lib/Net/IMAP/Sync.pm')
| -rw-r--r-- | lib/Net/IMAP/Sync.pm | 23 | 
1 files changed, 13 insertions, 10 deletions
| 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($_); | 
