Files
kotlin-fork/analysis/low-level-api-fir
Marco Pennekamp efb56ed30a [LL FIR] Implement disposal support for LLFirSessions
- 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
2024-02-27 16:45:52 +00:00
..