ModernUO/Projects/UOContent/Accounting/Security
Kamron Batman 2d9d83b2fd
fix(login): finish pending password writes on a normal shutdown
Exit() was never wired, so it was dead code either way. Wiring it correctly
depends on which teardown path is running.

On a normal shutdown EventSink.Shutdown fires on the game thread after the
loop has stopped, which is the last chance pending work gets: results the
worker already posted are sitting on a loop context nothing will pump again.
So the thread is stopped, the context drained once, and queued writes are
computed and applied in place. Verifies are dropped instead -- they only
decide a login, and every connection is closing.

On a crash there is no usable game thread, so nothing may be applied and the
thread is simply stopped. Subscribed separately because HandleClosed skips
InvokeShutdown when _crashed is set, which would otherwise leave the crash
path unhandled entirely.

Wired from AccountHandler.Initialize rather than a Configure on the worker:
AssemblyHandler.AddMethods binds Static | Public, so a Configure on an
internal type is never discovered.
2026-08-08 21:54:03 -07:00
..
AccountSecurity.cs perf(login): move password writes off-loop too, behind one mechanism 2026-08-08 12:25:49 -07:00
Argon2PasswordProtection.cs perf(login): verify Argon2 passwords on a parked worker thread 2026-08-08 10:50:25 -07:00
HashAlgorithmPasswordProtection.cs fix: Bumps deps. Updates copyrights (#2353) 2026-03-05 19:36:54 -08:00
PasswordWorker.cs fix(login): finish pending password writes on a normal shutdown 2026-08-08 21:54:03 -07:00
PBKDF2PasswordProtection.cs fix: Bumps deps. Updates copyrights (#2353) 2026-03-05 19:36:54 -08:00