]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/POP3D.pm
pop3: remove untouched rows on QUIT/disconnect
[public-inbox.git] / lib / PublicInbox / POP3D.pm
index 5cfe961343a58b732e8d1d52e001ae884ae508ba..7432a9640c89a20a0e818a9c7262d7ca7bda80f9 100644 (file)
@@ -45,7 +45,7 @@ sub new {
                # lock_path => ...
                # interprocess lock is the $pop3state/txn.locks file
                # txn_locks => {}, # intraworker locks
-               # accept_tls => { SSL_server => 1, ..., SSL_reuse_ctx => ... }
+               # ssl_ctx_opt => { SSL_cert_file => ..., SSL_key_file => ... }
        }, $cls;
 }
 
@@ -245,6 +245,12 @@ SELECT txn_id,uid_dele FROM deletes WHERE user_id = ? AND mailbox_id = ?
 sub unlock_mailbox {
        my ($self, $pop3) = @_;
        my $txn_id = delete($pop3->{txn_id}) // return;
+       if (!$pop3->{did_quit}) { # deal with QUIT-less disconnects
+               my $lk = $self->lock_for_scope;
+               $self->{-state_dbh}->begin_work;
+               $pop3->__cleanup_state($txn_id);
+               $self->{-state_dbh}->commit;
+       }
        delete $self->{txn_locks}->{$txn_id}; # same worker
 
        # other workers