e76692ef8d
- This commit replaces session modification trackers with event-based session invalidation. The removal of modification trackers should improve overall performance, because session invalidation events happen less frequently than sessions are accessed. Getting rid of modification trackers also allows sessions to refer to other sessions lazily, which is essential when cyclic dependencies occur. - The new `LLFirSession` validity tracker has constant complexity and will not cause the same kind of performance issues as dependency modification trackers. It is a bridge to support modification trackers in certain parts of the code (e.g. for `CachedValue`s), while being backed by event-based invalidation. - `LLFirSessionInvalidationService` is the bridge between modification events and `LLFirSessionCache`. It finds out which modules should be invalidated and instructs the session cache to remove the associated sessions. - Session invalidation must always happen in a write action to preserve consistency between sessions. Otherwise, while a session A is already removed from the cache, it might still be referenced by a dependent session B which is in the process of being invalidated. Such a session must never be returned from `getSession`. ^KT-57515 fixed