921 B
Simplex.Messaging.Session
Atomic get-or-create session variables with identity-safe removal.
Source: Session.hs
getSessVar
Returns Left newVar if the key was absent (variable created), Right existingVar if already present. The new variable gets an atomically incremented sessionVarId from the shared counter, and its sessionVar TMVar starts empty.
The caller uses the Left/Right distinction to decide whether to populate the TMVar (new session) or wait on the existing one.
removeSessVar
Only removes if the stored variable's sessionVarId matches the one being removed. This is a compare-and-swap pattern: between the time a caller obtained a SessionVar and the time it tries to remove it, another thread may have replaced it with a new session (via getSessVar). Without the ID check, the stale caller would remove the new session.