Skip to content

JAMES-4210 Improve SaslExchange cleanup - #3106

Open
quantranhong1999 wants to merge 4 commits into
apache:masterfrom
quantranhong1999:sasl-gssapi-kerberos-improve-resource-clean-up
Open

JAMES-4210 Improve SaslExchange cleanup#3106
quantranhong1999 wants to merge 4 commits into
apache:masterfrom
quantranhong1999:sasl-gssapi-kerberos-improve-resource-clean-up

Conversation

@quantranhong1999

Copy link
Copy Markdown
Member
  • Close SaslExchange upon client disconnection
  • Drop SaslExchange.abort(), just rely on .close() instead.

…nt disconnection

For POP3, the SASL exchange is well closed upon client disconnection, as `AuthCmdHandler` already implement `DisconnectHandler` to close the SASL exchange.
Dropping that piece of code indeed would make the test fail.
Track the active SASL exchange as an IMAP session attachment and close it when the connection terminates or encounters a transport exception.

IMAP authentication processing can run asynchronously. A disconnect may therefore race with SASL exchange creation and registration. Keep the tracker sealed after disconnect so delayed registrations are rejected and immediately closed.

Synchronize tracker lookup and creation on the individual IMAP session because getAttribute and setAttribute are not atomic together. This ensures authentication and disconnect paths use the same tracker without introducing cross-session contention.

Ensure normal completion, cancellation, failure, and disconnect paths release each exchange at most once. Add real IMAP server lifecycle tests for disconnect, cancellation, and terminal exchanges.
Simplify the SaslExchange usage. Just rely on SaslExchange.close() to cleanup exchange.

@chibenwa chibenwa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No objections

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants