From 7283dae2bca7a8a032c6627b0cac532c8f19f4aa Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Tue, 28 May 2019 15:47:10 +0200 Subject: Net::IMAP::InterIMAP: call shutdown(2) on teardown also for type=tunnel. Since we now use socketpair(2) for type=tunnel (instead of a pair of unnamed pipes) we can unify communication endpoints creation and teardown. --- lib/Net/IMAP/InterIMAP.pm | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'lib/Net/IMAP') diff --git a/lib/Net/IMAP/InterIMAP.pm b/lib/Net/IMAP/InterIMAP.pm index 1dd54b7..111537c 100644 --- a/lib/Net/IMAP/InterIMAP.pm +++ b/lib/Net/IMAP/InterIMAP.pm @@ -26,7 +26,8 @@ use Errno qw/EEXIST EINTR/; use Net::SSLeay 1.73 (); use List::Util qw/all first/; use POSIX ':signal_h'; -use Socket qw/SOCK_STREAM SOCK_RAW IPPROTO_TCP AF_UNIX AF_INET AF_INET6 PF_UNSPEC SOCK_CLOEXEC :addrinfo/; +use Socket qw/SOCK_STREAM SOCK_RAW SOCK_CLOEXEC IPPROTO_TCP SHUT_RDWR + AF_UNIX AF_INET AF_INET6 PF_UNSPEC :addrinfo/; use Exporter 'import'; BEGIN { @@ -506,7 +507,7 @@ sub stats($) { } -# Log out when the Net::IMAP::InterIMAP object is destroyed. +# Destroy a Net::IMAP::InterIMAP object. sub DESTROY($) { my $self = shift; $self->{_STATE} = 'LOGOUT'; @@ -514,8 +515,12 @@ sub DESTROY($) { Net::SSLeay::free($self->{_SSL}) if defined $self->{_SSL}; Net::SSLeay::CTX_free($self->{_SSL_CTX}) if defined $self->{_SSL_CTX}; - shutdown($self->{S}, 2) if $self->{type} ne 'tunnel' and defined $self->{S}; - $self->{S}->close() if defined $self->{S} and $self->{S}->opened(); + if (defined (my $s = $self->{S})) { + # for type=tunnel we assume the child won't linger around once + # we close its standard input and output. + shutdown($s, SHUT_RDWR); + $s->close() if $s->opened(); + } $self->stats() unless $self->{quiet}; } -- cgit v1.2.3 From 2761465d3bde7e326ffd3cb2c9bb480144f5a72d Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Tue, 28 May 2019 16:46:35 +0200 Subject: typo fixes --- lib/Net/IMAP/InterIMAP.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/Net/IMAP') diff --git a/lib/Net/IMAP/InterIMAP.pm b/lib/Net/IMAP/InterIMAP.pm index 111537c..19895c4 100644 --- a/lib/Net/IMAP/InterIMAP.pm +++ b/lib/Net/IMAP/InterIMAP.pm @@ -611,7 +611,7 @@ sub incapable($@) { # $self->search($criterion) -# Issue an UID SEARCH command with the given $criterion. For the "normal" +# Issue a UID SEARCH command with the given $criterion. For the "normal" # UID SEARCH command from RFC 3501, return the list of matching UIDs; # for the extended UID SEARCH command from RFC 4731 (ensuring ESEARCH # capability is the caller's responsibility), return an optional "UID" @@ -922,7 +922,7 @@ sub append($$@) { # $self->fetch($set, $flags, [$callback]) -# Issue an UID FETCH command with the given UID $set, $flags, and +# Issue a UID FETCH command with the given UID $set, $flags, and # optional $callback. sub fetch($$$;&) { my ($self, $set, $flags, $callback) = @_; -- cgit v1.2.3