]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/IMAP.pm
lei: clobber recvmsg buffer on errors
[public-inbox.git] / lib / PublicInbox / IMAP.pm
index bc34f4feea1e8ae7b6fe1c1bc5956f1c0d5b3d4f..58a0a9e37c441601c907a485f6ece5c8aee4d24f 100644 (file)
@@ -99,9 +99,6 @@ undef %FETCH_NEED;
 my $valid_range = '[0-9]+|[0-9]+:[0-9]+|[0-9]+:\*';
 $valid_range = qr/\A(?:$valid_range)(?:,(?:$valid_range))*\z/;
 
-# RFC 3501 5.4. Autologout Timer needs to be >= 30min
-$PublicInbox::DS::EXPTIME = 60 * 30;
-
 sub greet ($) {
        my ($self) = @_;
        my $capa = capa($self);
@@ -124,7 +121,6 @@ sub new ($$$) {
        } else {
                greet($self);
        }
-       $self->update_idle_time;
        $self;
 }
 
@@ -323,7 +319,6 @@ sub idle_tick_all {
        $IDLERS = undef;
        for my $i (values %$old) {
                next if ($i->{wbuf} || !exists($i->{-idle_tag}));
-               $i->update_idle_time or next;
                $IDLERS->{fileno($i->{sock})} = $i;
                $i->write(\"* OK Still here\r\n");
        }
@@ -398,8 +393,7 @@ sub inbox_lookup ($$;$) {
                                die "BUG: unexpected dummy mailbox: $mailbox\n";
                $uid_base = $1 * UID_SLICE;
 
-               # ->num_highwater caches for writers, so use ->meta_accessor
-               $uidmax = $ibx->mm->meta_accessor('num_highwater') // 0;
+               $uidmax = $ibx->mm->num_highwater // 0;
                if ($examine) {
                        $self->{uid_base} = $uid_base;
                        $self->{ibx} = $ibx;
@@ -877,12 +871,12 @@ sub eml_index_offs_i { # PublicInbox::Eml::each_part callback
 # prepares an index for BODY[$SECTION_IDX] fetches
 sub eml_body_idx ($$) {
        my ($eml, $section_idx) = @_;
-       my $idx = $eml->{imap_all_parts} //= do {
+       my $idx = $eml->{imap_all_parts} // do {
                my $all = {};
                $eml->each_part(\&eml_index_offs_i, $all, 0, 1);
                # top-level of multipart, BODY[0] not allowed (nz-number)
                delete $all->{0};
-               $all;
+               $eml->{imap_all_parts} = $all;
        };
        $idx->{$section_idx};
 }
@@ -1226,8 +1220,6 @@ sub long_step {
                out($self, " deferred[$fd] aborted - %0.6f", $elapsed);
                $self->close;
        } elsif ($more) { # $self->{wbuf}:
-               $self->update_idle_time;
-
                # control passed to ibx_async_cat if $more == \undef
                requeue_once($self) if !ref($more);
        } else { # all done!
@@ -1269,7 +1261,6 @@ sub event_step {
 
        return unless $self->flush_write && $self->{sock} && !$self->{long_cb};
 
-       $self->update_idle_time;
        # only read more requests if we've drained the write buffer,
        # otherwise we can be buffering infinitely w/o backpressure
 
@@ -1295,7 +1286,6 @@ sub event_step {
 
        return $self->close if $r < 0;
        $self->rbuf_idle($rbuf);
-       $self->update_idle_time;
 
        # maybe there's more pipelined data, or we'll have
        # to register it for socket-readiness notifications
@@ -1334,14 +1324,14 @@ sub cmd_starttls ($$) {
        undef;
 }
 
-# for graceful shutdown in PublicInbox::Daemon:
-sub busy {
-       my ($self, $now) = @_;
+sub busy { # for graceful shutdown in PublicInbox::Daemon:
+       my ($self) = @_;
        if (defined($self->{-idle_tag})) {
                $self->write(\"* BYE server shutting down\r\n");
                return; # not busy anymore
        }
-       ($self->{rbuf} || $self->{wbuf} || $self->not_idle_long($now));
+       defined($self->{rbuf}) || defined($self->{wbuf}) ||
+               !$self->write(\"* BYE server shutting down\r\n");
 }
 
 sub close {