Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove DelayUntilFirstValue #130

Merged
merged 1 commit into from
Mar 3, 2025
Merged

Remove DelayUntilFirstValue #130

merged 1 commit into from
Mar 3, 2025

Conversation

erri120
Copy link
Member

@erri120 erri120 commented Mar 3, 2025

The method caused a deadlock in our testing. It should no longer be needed because ObserveDatoms has been updated recently with a queue.

The method caused a deadlock in our testing. It should no longer be
needed because `ObserveDatoms` has been updated recently with a queue.
@erri120 erri120 requested a review from halgari March 3, 2025 12:01
@Al12rs
Copy link

Al12rs commented Mar 3, 2025

This is the stack trace that we saw in a deadlock of the app:
We saw that DbStream.Subscribe() was getting called on the UI thread, which should not be happening after the changes for having ObserveDatoms on the DB Event Thread.

Monitor.Enter() at C:/Users/Al12r/AppData/Roaming/JetBrains/Rider2024.3/resharper-host/SourcesCache/f5c5fabf10b2751774ff136491ac41fbc0932fbd1315879ac29f2d13e2ad24b/Monitor.CoreCLR.cs:line 49
Switch<ChangeSet<Datom, DatomKey, IDb>>._.OnCompleted() at C:/Users/Al12r/AppData/Roaming/JetBrains/Rider2024.3/resharper-host/SourcesCache/a1e11eb7991a34d4685c25a8b07392e013de2bba4dff2eb6fb68afac73a250/Switch.cs:line 72
Sink<IObservable<ChangeSet<Datom, DatomKey, IDb>>>.ForwardOnCompleted() at C:/Users/Al12r/AppData/Roaming/JetBrains/Rider2024.3/resharper-host/SourcesCache/5028320658ac437c327e7d57cfe06dfc5a791c618d8c2bb0545639ff987b/Sink.cs:line 54
Sink<IDb, IObservable<ChangeSet<Datom, DatomKey, IDb>>>.OnCompleted() at C:/Users/Al12r/AppData/Roaming/JetBrains/Rider2024.3/resharper-host/SourcesCache/5028320658ac437c327e7d57cfe06dfc5a791c618d8c2bb0545639ff987b/Sink.cs:line 96
Sink<IDb>.ForwardOnCompleted() at C:/Users/Al12r/AppData/Roaming/JetBrains/Rider2024.3/resharper-host/SourcesCache/5028320658ac437c327e7d57cfe06dfc5a791c618d8c2bb0545639ff987b/Sink.cs:line 54
Take<IDb>.Count._.OnNext() at C:/Users/Al12r/AppData/Roaming/JetBrains/Rider2024.3/resharper-host/SourcesCache/132e871a77c1ac969d41883b1c9e0b6a6aad7f3aaa771f9875a339d13f112/Take.cs:line 63
DbStream.ForwardOnlyObserver.OnNext() at C:/Users/Al12r/AppData/Roaming/JetBrains/Rider2024.3/resharper-host/SourcesCache/c158198c3c8e3cf4b5ec815c86d976dec46d526f9bfd401c108c1b325d54b/DbStream.cs:line 103
DbStream.Subscribe() at C:/Users/Al12r/AppData/Roaming/JetBrains/Rider2024.3/resharper-host/SourcesCache/c158198c3c8e3cf4b5ec815c86d976dec46d526f9bfd401c108c1b325d54b/DbStream.cs:line 49
ObservableExtensions.SubscribeSafe<NexusMods.MnemonicDB.Abstractions.IDb>() at C:/Users/Al12r/AppData/Roaming/JetBrains/Rider2024.3/resharper-host/SourcesCache/72832e242b1b5b2b5f2cfe23f68fbfedefd417121b74c7b4f76b514a1c40/Observable.Extensions.cs:line 395 [2]
Sink<IDb, IDb>.Run()
Take<IDb>.Count.Run() at C:/Users/Al12r/AppData/Roaming/JetBrains/Rider2024.3/resharper-host/SourcesCache/132e871a77c1ac969d41883b1c9e0b6a6aad7f3aaa771f9875a339d13f112/Take.cs:line 42
Producer<IDb, Take<IDb>.Count._>.SubscribeRaw() at C:/Users/Al12r/AppData/Roaming/JetBrains/Rider2024.3/resharper-host/SourcesCache/3d2f19452f9866870d3213cc665f078522038d0cc1335cc75c85425da9a3ff9/Producer.cs:line 125
ObservableExtensions.SubscribeSafe<NexusMods.MnemonicDB.Abstractions.IDb>() [1]
Sink<IDb, IObservable<ChangeSet<Datom, DatomKey, IDb>>>.Run()
Select<IDb, IObservable<ChangeSet<Datom, DatomKey, IDb>>>.Selector.Run()
Producer<IObservable<ChangeSet<Datom, DatomKey, IDb>>, Select<IDb, IObservable<ChangeSet<Datom, DatomKey, IDb>>>.Selector._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<System.IObservable<DynamicData.ChangeSet<NexusMods.MnemonicDB.Abstractions.DatomIterators.Datom, NexusMods.MnemonicDB.Abstractions.DatomKey, NexusMods.MnemonicDB.Abstractions.IDb>>>()
Sink<IObservable<ChangeSet<Datom, DatomKey, IDb>>, ChangeSet<Datom, DatomKey, IDb>>.Run()
Switch<ChangeSet<Datom, DatomKey, IDb>>.Run()
Producer<ChangeSet<Datom, DatomKey, IDb>, Switch<ChangeSet<Datom, DatomKey, IDb>>._>.SubscribeRaw() at C:/Users/Al12r/AppData/Roaming/JetBrains/Rider2024.3/resharper-host/SourcesCache/3d2f19452f9866870d3213cc665f078522038d0cc1335cc75c85425da9a3ff9/Producer.cs:line 125
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.MnemonicDB.Abstractions.DatomIterators.Datom, NexusMods.MnemonicDB.Abstractions.DatomKey>>()
Sink<IChangeSet<Datom, DatomKey>, ChangeSet<Datom, EntityId>>.Run()
Select<IChangeSet<Datom, DatomKey>, ChangeSet<Datom, EntityId>>.Selector.Run()
Producer<ChangeSet<Datom, EntityId>, Select<IChangeSet<Datom, DatomKey>, ChangeSet<Datom, EntityId>>.Selector._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.MnemonicDB.Abstractions.DatomIterators.Datom, NexusMods.MnemonicDB.Abstractions.EntityId>>()
Sink<IChangeSet<Datom, EntityId>, ChangeAwareCache<LoadoutItem.ReadOnly, EntityId>>.Run()
Scan<IChangeSet<Datom, EntityId>, ChangeAwareCache<LoadoutItem.ReadOnly, EntityId>>.Run()
Producer<ChangeAwareCache<LoadoutItem.ReadOnly, EntityId>, Scan<IChangeSet<Datom, EntityId>, ChangeAwareCache<LoadoutItem.ReadOnly, EntityId>>._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.ChangeAwareCache<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [2]
Sink<ChangeAwareCache<LoadoutItem.ReadOnly, EntityId>, ChangeAwareCache<LoadoutItem.ReadOnly, EntityId>>.Run()
Where<ChangeAwareCache<LoadoutItem.ReadOnly, EntityId>>.Predicate.Run()
Producer<ChangeAwareCache<LoadoutItem.ReadOnly, EntityId>, Where<ChangeAwareCache<LoadoutItem.ReadOnly, EntityId>>.Predicate._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.ChangeAwareCache<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [1]
Sink<ChangeAwareCache<LoadoutItem.ReadOnly, EntityId>, ChangeSet<LoadoutItem.ReadOnly, EntityId>>.Run()
Select<ChangeAwareCache<LoadoutItem.ReadOnly, EntityId>, ChangeSet<LoadoutItem.ReadOnly, EntityId>>.Selector.Run()
Producer<ChangeSet<LoadoutItem.ReadOnly, EntityId>, Select<ChangeAwareCache<LoadoutItem.ReadOnly, EntityId>, ChangeSet<LoadoutItem.ReadOnly, EntityId>>.Selector._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [9]
Sink<IChangeSet<LoadoutItem.ReadOnly, EntityId>, IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Run() [5]
Defer<IChangeSet<LoadoutItem.ReadOnly, EntityId>>._.Run()
Defer<IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Run()
Producer<IChangeSet<LoadoutItem.ReadOnly, EntityId>, Defer<IChangeSet<LoadoutItem.ReadOnly, EntityId>>._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [8]
FilterImmutable<LoadoutItem.ReadOnly, EntityId>.<Run>b__4_0()
QueryLanguage.CreateWithDisposableObservable<IChangeSet<LoadoutItem.ReadOnly, EntityId>>.SubscribeCore() [2]
ObservableBase<IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Subscribe() [2]
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [7]
Sink<IChangeSet<LoadoutItem.ReadOnly, EntityId>, IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Run() [4]
Synchronize<IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Run() [2]
Producer<IChangeSet<LoadoutItem.ReadOnly, EntityId>, Synchronize<IChangeSet<LoadoutItem.ReadOnly, EntityId>>._>.SubscribeRaw() [2]
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [6]
Sink<IChangeSet<LoadoutItem.ReadOnly, EntityId>, ChangeSet<LoadoutItem.ReadOnly, EntityId>>.Run()
Select<IChangeSet<LoadoutItem.ReadOnly, EntityId>, ChangeSet<LoadoutItem.ReadOnly, EntityId>>.Selector.Run()
Producer<ChangeSet<LoadoutItem.ReadOnly, EntityId>, Select<IChangeSet<LoadoutItem.ReadOnly, EntityId>, ChangeSet<LoadoutItem.ReadOnly, EntityId>>.Selector._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [5]
Sink<IChangeSet<LoadoutItem.ReadOnly, EntityId>, IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Run() [3]
Where<IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Predicate.Run()
Producer<IChangeSet<LoadoutItem.ReadOnly, EntityId>, Where<IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Predicate._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [4]
Sink<IChangeSet<LoadoutItem.ReadOnly, EntityId>, IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Run() [2]
Do<IChangeSet<LoadoutItem.ReadOnly, EntityId>>.OnNext.Run()
Producer<IChangeSet<LoadoutItem.ReadOnly, EntityId>, Do<IChangeSet<LoadoutItem.ReadOnly, EntityId>>.OnNext._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [3]
Sink<IChangeSet<LoadoutItem.ReadOnly, EntityId>, IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Run() [1]
Synchronize<IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Run() [1]
Producer<IChangeSet<LoadoutItem.ReadOnly, EntityId>, Synchronize<IChangeSet<LoadoutItem.ReadOnly, EntityId>>._>.SubscribeRaw() [1]
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [2]
Finally<IChangeSet<LoadoutItem.ReadOnly, EntityId>>._.Run()
Finally<IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Run()
Producer<IChangeSet<LoadoutItem.ReadOnly, EntityId>, Finally<IChangeSet<LoadoutItem.ReadOnly, EntityId>>._>.SubscribeRaw()
Producer<IChangeSet<LoadoutItem.ReadOnly, EntityId>, Finally<IChangeSet<LoadoutItem.ReadOnly, EntityId>>._>.Subscribe()
ObservableExtensions.Subscribe<DynamicData.IChangeSet<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>()
MergeMany<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId, IChangeSet<LoadoutItem.ReadOnly, EntityId>>.<>c__DisplayClass4_0.<Run>b__1()
SubscribeMany<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>.<Run>b__4_1()
ObservableCacheEx.<>c__DisplayClass213_0<IDisposable, ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>.<Transform>b__0()
Transform<IDisposable, ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>.<RunImpl>b__6_0()
Scan<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, ChangeAwareCache<IDisposable, EntityId>>._.OnNext()
Subject<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.OnNext() [2]
Sink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.ForwardOnNext() [6]
IdentitySink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.OnNext() [4]
Sink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.ForwardOnNext() [5]
IdentitySink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.OnNext() [3]
Subject<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.OnNext() [1]
Sink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.ForwardOnNext() [4]
IdentitySink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.OnNext() [2]
Sink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.ForwardOnNext() [3]
Do<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.OnNext._.OnNext()
Sink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.ForwardOnNext() [2]
Synchronize<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>._.OnNext()
Sink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.ForwardOnNext() [1]
IdentitySink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.OnNext() [1]
Sink<ChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.ForwardOnNext()
Select<ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, ChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Selector._.OnNext()
Sink<ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.ForwardOnNext() [2]
Where<ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Predicate._.OnNext()
Sink<ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.ForwardOnNext() [1]
Scan<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>, ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>._.OnNext()
AutoDetachObserver<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.OnNextCore() [4]
ObserverBase<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.OnNext() [4]
AutoDetachObserver<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.OnNextCore() [3]
ObserverBase<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.OnNext() [3]
AutoDetachObserver<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.OnNextCore() [2]
ObserverBase<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.OnNext() [2]
Sink<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.ForwardOnNext() [2]
Where<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.Predicate._.OnNext()
Sink<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.ForwardOnNext() [1]
IdentitySink<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.OnNext()
AutoDetachObserver<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.OnNextCore() [1]
ObserverBase<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.OnNext() [1]
InternalEx.<>c__DisplayClass6_0<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.<Return>b__0()
QueryLanguage.CreateWithActionDisposable<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.SubscribeCore()
ObservableBase<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.Subscribe() [4]
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.NexusModsLibrary.NexusModsLibraryItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [6]
TailRecursiveSink<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.Drain()
TailRecursiveSink<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.Run()
Concat<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.Run()
Producer<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>, Concat<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.NexusModsLibrary.NexusModsLibraryItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [5]
Sink<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>, IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.Run()
Where<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.Predicate.Run()
Producer<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>, Where<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.Predicate._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.NexusModsLibrary.NexusModsLibraryItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [4]
ObservableCache<NexusModsLibraryItem.ReadOnly, EntityId>.<>c__DisplayClass30_0.<CreateConnectObservable>b__0()
QueryLanguage.CreateWithDisposableObservable<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.SubscribeCore() [3]
ObservableBase<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.Subscribe() [3]
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.NexusModsLibrary.NexusModsLibraryItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [3]
ObservableCache<NexusModsLibraryItem.ReadOnly, EntityId>.<>c__DisplayClass20_0.<Connect>b__0()
QueryLanguage.CreateWithDisposableObservable<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.SubscribeCore() [2]
ObservableBase<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.Subscribe() [2]
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.NexusModsLibrary.NexusModsLibraryItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [2]
RefCount<NexusModsLibraryItem.ReadOnly, EntityId>.<Run>b__5_0()
QueryLanguage.CreateWithDisposableObservable<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.SubscribeCore() [1]
ObservableBase<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>>.Subscribe() [1]
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.NexusModsLibrary.NexusModsLibraryItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [1]
Sink<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>, ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Run()
Scan<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>, ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Run()
Producer<ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, Scan<IChangeSet<NexusModsLibraryItem.ReadOnly, EntityId>, ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.ChangeAwareCache<DynamicData.Cache.Internal.ChangeSetCache<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, NexusMods.MnemonicDB.Abstractions.EntityId>>() [2]
Sink<ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Run()
Where<ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Predicate.Run()
Producer<ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, Where<ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Predicate._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.ChangeAwareCache<DynamicData.Cache.Internal.ChangeSetCache<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, NexusMods.MnemonicDB.Abstractions.EntityId>>() [1]
Sink<ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, ChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Run()
Select<ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, ChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Selector.Run()
Producer<ChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, Select<ChangeAwareCache<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, ChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Selector._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<DynamicData.Cache.Internal.ChangeSetCache<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, NexusMods.MnemonicDB.Abstractions.EntityId>>() [5]
Sink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Run() [4]
Defer<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>._.Run()
Defer<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Run()
Producer<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, Defer<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<DynamicData.Cache.Internal.ChangeSetCache<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, NexusMods.MnemonicDB.Abstractions.EntityId>>() [4]
Sink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Run() [3]
Synchronize<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Run()
Producer<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, Synchronize<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<DynamicData.Cache.Internal.ChangeSetCache<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, NexusMods.MnemonicDB.Abstractions.EntityId>>() [3]
Sink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Run() [2]
Do<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.OnNext.Run()
Producer<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, Do<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.OnNext._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<DynamicData.Cache.Internal.ChangeSetCache<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, NexusMods.MnemonicDB.Abstractions.EntityId>>() [2]
Sink<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Run() [1]
AsObservable<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Run()
Producer<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, AsObservable<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<DynamicData.Cache.Internal.ChangeSetCache<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, NexusMods.MnemonicDB.Abstractions.EntityId>>() [1]
ConnectableObservable<IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>, IChangeSet<ChangeSetCache<LoadoutItem.ReadOnly, EntityId>, EntityId>>.Connect()
MergeManyCacheChangeSets<NexusModsLibraryItem.ReadOnly, EntityId, LoadoutItem.ReadOnly, EntityId>.<Run>b__5_0() at /_/src/DynamicData/Cache/Internal/MergeManyCacheChangeSets.cs:line 61
QueryLanguage.CreateWithDisposableObservable<IChangeSet<LoadoutItem.ReadOnly, EntityId>>.SubscribeCore() [1]
ObservableBase<IChangeSet<LoadoutItem.ReadOnly, EntityId>>.Subscribe() [1]
ObservableExtensions.SubscribeSafe<DynamicData.IChangeSet<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [1]
Sink<IChangeSet<LoadoutItem.ReadOnly, EntityId>, Cache<LoadoutItem.ReadOnly, EntityId>>.Run()
Scan<IChangeSet<LoadoutItem.ReadOnly, EntityId>, Cache<LoadoutItem.ReadOnly, EntityId>>.Run()
Producer<Cache<LoadoutItem.ReadOnly, EntityId>, Scan<IChangeSet<LoadoutItem.ReadOnly, EntityId>, Cache<LoadoutItem.ReadOnly, EntityId>>._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.Cache.Internal.Cache<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [2]
Sink<Cache<LoadoutItem.ReadOnly, EntityId>, Cache<LoadoutItem.ReadOnly, EntityId>>.Run()
Defer<Cache<LoadoutItem.ReadOnly, EntityId>>._.Run()
Defer<Cache<LoadoutItem.ReadOnly, EntityId>>.Run()
Producer<Cache<LoadoutItem.ReadOnly, EntityId>, Defer<Cache<LoadoutItem.ReadOnly, EntityId>>._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.Cache.Internal.Cache<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>() [1]
Sink<Cache<LoadoutItem.ReadOnly, EntityId>, AnonymousQuery<LoadoutItem.ReadOnly, EntityId>>.Run()
Select<Cache<LoadoutItem.ReadOnly, EntityId>, AnonymousQuery<LoadoutItem.ReadOnly, EntityId>>.Selector.Run()
Producer<AnonymousQuery<LoadoutItem.ReadOnly, EntityId>, Select<Cache<LoadoutItem.ReadOnly, EntityId>, AnonymousQuery<LoadoutItem.ReadOnly, EntityId>>.Selector._>.SubscribeRaw()
ObservableExtensions.SubscribeSafe<DynamicData.IQuery<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>>()
Sink<IQuery<LoadoutItem.ReadOnly, EntityId>, Optional<DateTimeOffset>>.Run()
Select<IQuery<LoadoutItem.ReadOnly, EntityId>, Optional<DateTimeOffset>>.Selector.Run()
Producer<Optional<DateTimeOffset>, Select<IQuery<LoadoutItem.ReadOnly, EntityId>, Optional<DateTimeOffset>>.Selector._>.<>c.<SubscribeRaw>b__1_0()
Scheduler.<>c__75<(Producer<Optional<DateTimeOffset>, Select<IQuery<LoadoutItem.ReadOnly, EntityId>, Optional<DateTimeOffset>>.Selector._>, Select<IQuery<LoadoutItem.ReadOnly, EntityId>, Optional<DateTimeOffset>>.Selector._)>.<ScheduleAction>b__75_0()
CurrentThreadScheduler.Schedule<(System.Action<(System.Reactive.Producer<DynamicData.Kernel.Optional<System.DateTimeOffset>, System.Reactive.Linq.ObservableImpl.Select<DynamicData.IQuery<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, DynamicData.Kernel.Optional<System.DateTimeOffset>>.Selector._>, System.Reactive.Linq.ObservableImpl.Select<DynamicData.IQuery<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, DynamicData.Kernel.Optional<System.DateTimeOffset>>.Selector._)>, (System.Reactive.Producer<DynamicData.Kernel.Optional<System.DateTimeOffset>, System.Reactive.Linq.ObservableImpl.Select<DynamicData.IQuery<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, DynamicData.Kernel.Optional<System.DateTimeOffset>>.Selector._>, System.Reactive.Linq.ObservableImpl.Select<DynamicData.IQuery<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, DynamicData.Kernel.Optional<System.DateTimeOffset>>.Selector._))>()
LocalScheduler.Schedule<(System.Action<(System.Reactive.Producer<DynamicData.Kernel.Optional<System.DateTimeOffset>, System.Reactive.Linq.ObservableImpl.Select<DynamicData.IQuery<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, DynamicData.Kernel.Optional<System.DateTimeOffset>>.Selector._>, System.Reactive.Linq.ObservableImpl.Select<DynamicData.IQuery<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, DynamicData.Kernel.Optional<System.DateTimeOffset>>.Selector._)>, (System.Reactive.Producer<DynamicData.Kernel.Optional<System.DateTimeOffset>, System.Reactive.Linq.ObservableImpl.Select<DynamicData.IQuery<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, DynamicData.Kernel.Optional<System.DateTimeOffset>>.Selector._>, System.Reactive.Linq.ObservableImpl.Select<DynamicData.IQuery<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, DynamicData.Kernel.Optional<System.DateTimeOffset>>.Selector._))>()
Scheduler.ScheduleAction<(System.Reactive.Producer<DynamicData.Kernel.Optional<System.DateTimeOffset>, System.Reactive.Linq.ObservableImpl.Select<DynamicData.IQuery<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, DynamicData.Kernel.Optional<System.DateTimeOffset>>.Selector._>, System.Reactive.Linq.ObservableImpl.Select<DynamicData.IQuery<NexusMods.Abstractions.Loadouts.LoadoutItem.ReadOnly, NexusMods.MnemonicDB.Abstractions.EntityId>, DynamicData.Kernel.Optional<System.DateTimeOffset>>.Selector._)>()
Producer<Optional<DateTimeOffset>, Select<IQuery<LoadoutItem.ReadOnly, EntityId>, Optional<DateTimeOffset>>.Selector._>.SubscribeRaw()
Producer<Optional<DateTimeOffset>, Select<IQuery<LoadoutItem.ReadOnly, EntityId>, Optional<DateTimeOffset>>.Selector._>.Subscribe()
IObservableToObservable<Optional<DateTimeOffset>>.SubscribeCore()
Observable<Optional<DateTimeOffset>>.Subscribe()
WhereSelect<Optional<DateTimeOffset>, DateTimeOffset>.SubscribeCore()
Observable<DateTimeOffset>.Subscribe() [3]
ObserveOnDispatcher<DateTimeOffset>.SubscribeCore() [2]
Observable<DateTimeOffset>.Subscribe() [2]
ObserveOnDispatcher<DateTimeOffset>.SubscribeCore() [1]
Observable<DateTimeOffset>.Subscribe() [1]
CombineLatest<DateTimeOffset, DateTimeOffset, (DateTimeOffset, DateTimeOffset)>._CombineLatest.Run()
CombineLatest<DateTimeOffset, DateTimeOffset, (DateTimeOffset, DateTimeOffset)>.SubscribeCore()
Observable<(DateTimeOffset, DateTimeOffset)>.Subscribe()
ObservableSubscribeExtensions.Subscribe<(System.DateTimeOffset, System.DateTimeOffset), NexusMods.App.UI.Controls.DateComponent>()
DateComponent.<>c.<.ctor>b__8_0()
R3Extensions.<>c__1<DateComponent, Observable<DateTimeOffset>>.<WhenActivated>b__1_0()
AnonymousObserver<bool, ((DateComponent, Observable<DateTimeOffset>), SerialDisposable, Action<DateComponent, Observable<DateTimeOffset>, CompositeDisposable>)>.OnNextCore()
Observer<bool>.OnNext() [2]
DistinctUntilChanged<bool>._DistinctUntilChanged.OnNextCore()
Observer<bool>.OnNext() [1]
BehaviorSubject<bool>.OnNext()
ReactiveR3Object.Activate()
CompositeItemModel<EntityId>.<>c.<.ctor>b__9_1()
AnonymousObserver<DictionaryAddEvent<ComponentKey, IItemModelComponent>, (CompositeItemModel<EntityId>, CompositeDisposable)>.OnNextCore()
Observer<DictionaryAddEvent<ComponentKey, IItemModelComponent>>.OnNext()
ObserveOnDispatcher<DictionaryAddEvent<ComponentKey, IItemModelComponent>>._ObserveOnDispatcher.DrainMessages()
DispatcherOperation.InvokeCore()
DispatcherOperation.Execute()
Dispatcher.ExecuteJob()
Dispatcher.ExecuteJobsCore()
Dispatcher.Signaled()
Win32DispatcherImpl.DispatchWorkItem()
Win32Platform.WndProc()
[Managed to Native Transition]
Win32DispatcherImpl.RunLoop()
DispatcherFrame.Run()
Dispatcher.PushFrame()
Dispatcher.MainLoop()
ClassicDesktopStyleApplicationLifetime.StartCore()
ClassicDesktopStyleApplicationLifetime.Start()
ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime()
Startup.Main()
Program.Main()

Copy link
Contributor

@halgari halgari left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense, I'll get a version cut with this in it

@halgari halgari merged commit fbdeb09 into main Mar 3, 2025
4 checks passed
@halgari halgari deleted the fix/deadlock branch March 3, 2025 13:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

3 participants