efb56ed30a
- This commit adds a `Disposable` to `LLFirSession` which lives as long as the session. For example, session components can now open a message bus connection that is automatically disposed after the session has been invalidated or reclaimed. - Because `LLFirSession`s should still benefit from soft reference-based automatic reclamation by the GC, we have to use a soft value map with cleanup in `LLFirSessionCache`. It ensures that the child disposables are properly disposed even when the session is collected as a soft value. - The session cannot be the `Disposable` itself because a valid disposable reference is needed to call `Disposer.dispose`. When a soft reference is added to a reference queue (such as the reference queue employed by the soft value map), its referent is already cleared. Hence, it's not possible to watch a softly referenced `Disposable` with a reference queue and also pass it to `Disposer.dispose`. This is why the `LLFirSessionCleaner` contains a strong reference to the `disposable`, because that will not keep the `LLFirSession` from being reclaimed, while keeping the `disposable` alive slightly longer than the session. ^KT-61222