harden(lifecycle): purge consumer callbacks on module unload (crash safety)
Mirror SourceMod SendProxyManager's OnPluginUnloaded purge. Each per-client callback records its owning assembly (delegate's declaring assembly); on OnLibraryDisconnect the manager purges that module's callbacks, so the send path can never invoke a delegate into an unloaded AssemblyLoadContext (the main server-crash vector for a consumer hot-reload/unload). Entity removal already clears entity-scoped regs (OnEntityDeleted); the per-client path stores no per-client state (transient [ThreadStatic] recipient) so disconnect needs no cleanup; dispatch is stateless + IsUserPtr-gated + Unsupported-passthrough. README documents the lifecycle guarantees. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
P
Prefix committed
0e038558b1cc7d714ffb291138e37187f5570346
Parent: 19b7cd9