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

Exception when opening coin list #12927

Open
soosr opened this issue Apr 24, 2024 · 1 comment
Open

Exception when opening coin list #12927

soosr opened this issue Apr 24, 2024 · 1 comment
Assignees
Milestone

Comments

@soosr
Copy link
Collaborator

soosr commented Apr 24, 2024

  1. Log in with two of your wallets.
  2. Open the Coin List with the first wallet.
  3. Dialog doesn't open, see exception in logs.

When only one wallet is logged in at a time, it works in both.
(@SuperJMN Couldn't repro, so it must be related to a special case)

Exception:

2024-04-24 11:24:07.307 [1] ERROR       Program.RunAsGuiAsync (162)     System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at WalletWasabi.Fluent.ViewModels.Wallets.Coins.PocketViewModel.CommonOrDefault[T](IList`1 list) in WalletWasabi.Fluent\ViewModels\Wallets\Coins\PocketViewModel.cs:line 121
   at WalletWasabi.Fluent.ViewModels.Wallets.Coins.PocketViewModel.GetAnonScore(IEnumerable`1 pocketCoins) in WalletWasabi.Fluent\ViewModels\Wallets\Coins\PocketViewModel.cs:line 110
   at WalletWasabi.Fluent.ViewModels.Wallets.Coins.PocketViewModel..ctor(IWalletModel wallet, Pocket pocket, Boolean ignorePrivacyMode) in WalletWasabi.Fluent\ViewModels\Wallets\Coins\PocketViewModel.cs:line 31
   at WalletWasabi.Fluent.ViewModels.Wallets.Coins.CoinListViewModel.<>c__DisplayClass25_0.<RefreshFromPockets>b__0(Pocket pocket) in WalletWasabi.Fluent\ViewModels\Wallets\Coins\CoinListViewModel.cs:line 181
   at System.Linq.Enumerable.SelectEnumerableIterator`2.ToList()
   at DynamicData.Kernel.EnumerableEx.AsList[T](IEnumerable`1 source) in /_/src/DynamicData/Kernel/EnumerableEx.cs:line 45
   at DynamicData.RangeChange`1..ctor(IEnumerable`1 items, Int32 index) in /_/src/DynamicData/List/RangeChange.cs:line 29
   at DynamicData.Change`1..ctor(ListChangeReason reason, IEnumerable`1 items, Int32 index) in /_/src/DynamicData/List/Change.cs:line 47
   at DynamicData.ChangeAwareList`1.AddRange(IEnumerable`1 collection) in /_/src/DynamicData/List/ChangeAwareList.cs:line 131
   at WalletWasabi.Fluent.ViewModels.Wallets.Coins.CoinListViewModel.<>c__DisplayClass25_0.<RefreshFromPockets>b__1(IExtendedList`1 x) in WalletWasabi.Fluent\ViewModels\Wallets\Coins\CoinListViewModel.cs:line 188
   at DynamicData.List.Internal.ReaderWriter`1.Write(Action`1 updateAction) in /_/src/DynamicData/List/Internal/ReaderWriter.cs:line 75
   at DynamicData.SourceList`1.Edit(Action`1 updateAction) in /_/src/DynamicData/List/SourceList.cs:line 129
   at WalletWasabi.Fluent.ViewModels.Wallets.Coins.CoinListViewModel.RefreshFromPockets(ISourceList`1 source, IEnumerable`1 pockets) in WalletWasabi.Fluent\ViewModels\Wallets\Coins\CoinListViewModel.cs:line 184
   at WalletWasabi.Fluent.ViewModels.Wallets.Coins.CoinListViewModel.<>c__DisplayClass4_1.<.ctor>b__11(IReadOnlyCollection`1 pockets) in WalletWasabi.Fluent\ViewModels\Wallets\Coins\CoinListViewModel.cs:line 108
   at System.Reactive.Linq.ObservableImpl.Do`1.OnNext._.OnNext(TSource value)
--- End of stack trace from previous location ---
   at System.Reactive.PlatformServices.ExceptionServicesImpl.Rethrow(Exception exception)
   at System.Reactive.ExceptionHelpers.Throw(Exception exception)
   at System.Reactive.Stubs.<>c.<.cctor>b__2_1(Exception ex)
   at System.Reactive.AnonymousSafeObserver`1.OnError(Exception error)
   at System.Reactive.Sink`1.ForwardOnError(Exception error)
   at System.Reactive.Linq.ObservableImpl.Do`1.OnNext._.OnNext(TSource value)
   at System.Reactive.Linq.ObservableImpl.SkipWhile`1.Predicate._.OnNext(TSource value)
   at System.Reactive.Linq.ObservableImpl.Scan`2._.OnNext(TSource value)
   at System.Reactive.AutoDetachObserver`1.OnNextCore(T value)
   at System.Reactive.Linq.ObservableImpl.Where`1.Predicate._.OnNext(TSource value)
   at System.Reactive.AutoDetachObserver`1.OnNextCore(T value)
   at DynamicData.Kernel.InternalEx.<>c__DisplayClass6_0`1.<Return>b__0(IObserver`1 o) in /_/src/DynamicData/Kernel/InternalEx.cs:line 125
   at System.Reactive.Linq.QueryLanguage.CreateWithActionDisposable`1.SubscribeCore(IObserver`1 observer)
   at System.Reactive.ObservableBase`1.Subscribe(IObserver`1 observer)
   at System.Reactive.TailRecursiveSink`1.Drain()
   at System.Reactive.TailRecursiveSink`1.Run(IEnumerable`1 sources)
   at System.Reactive.Producer`2.SubscribeRaw(IObserver`1 observer, Boolean enableSafeguard)
   at System.Reactive.Sink`2.Run(IObservable`1 source)
   at System.Reactive.Producer`2.SubscribeRaw(IObserver`1 observer, Boolean enableSafeguard)
   at DynamicData.ObservableCache`2.<>c__DisplayClass19_0.<Connect>b__0(IObserver`1 observer) in /_/src/DynamicData/Cache/ObservableCache.cs:line 125
   at System.Reactive.Linq.QueryLanguage.CreateWithDisposableObservable`1.SubscribeCore(IObserver`1 observer)
   at System.Reactive.ObservableBase`1.Subscribe(IObserver`1 observer)
   at System.Reactive.Sink`2.Run(IObservable`1 source)
   at System.Reactive.Linq.ObservableImpl.Scan`2.Run(_ sink)
   at System.Reactive.Producer`2.SubscribeRaw(IObserver`1 observer, Boolean enableSafeguard)
   at System.Reactive.Sink`2.Run(IObservable`1 source)
   at System.Reactive.Linq.ObservableImpl.Defer`1._.Run()
   at System.Reactive.Linq.ObservableImpl.Defer`1.Run(_ sink)
   at System.Reactive.Producer`2.SubscribeRaw(IObserver`1 observer, Boolean enableSafeguard)
   at System.Reactive.Sink`2.Run(IObservable`1 source)
   at System.Reactive.Producer`2.SubscribeRaw(IObserver`1 observer, Boolean enableSafeguard)
   at System.Reactive.Sink`2.Run(IObservable`1 source)
   at System.Reactive.Producer`2.SubscribeRaw(IObserver`1 observer, Boolean enableSafeguard)
   at System.Reactive.Sink`2.Run(IObservable`1 source)
   at System.Reactive.Linq.ObservableImpl.SkipWhile`1.Predicate.Run(_ sink)
   at System.Reactive.Producer`2.SubscribeRaw(IObserver`1 observer, Boolean enableSafeguard)
   at System.Reactive.Sink`2.Run(IObservable`1 source)
   at System.Reactive.Linq.ObservableImpl.Do`1.OnNext.Run(_ sink)
   at System.Reactive.Producer`2.SubscribeRaw(IObserver`1 observer, Boolean enableSafeguard)
   at System.ObservableExtensions.Subscribe[T](IObservable`1 source)
   at WalletWasabi.Fluent.ViewModels.Wallets.Coins.CoinListViewModel..ctor(IWalletModel wallet, IList`1 initialCoinSelection, Boolean ignorePrivacyMode) in WalletWasabi.Fluent\ViewModels\Wallets\Coins\CoinListViewModel.cs:line 101
   at WalletWasabi.Fluent.ViewModels.Wallets.Advanced.WalletCoinsViewModel..ctor(IWalletModel wallet) in WalletWasabi.Fluent\ViewModels\Wallets\Advanced\WalletCoinsViewModel.cs:line 42
   at WalletWasabi.Fluent.ViewModels.Wallets.Advanced.WalletCoinsViewModel..ctor(UiContext uiContext, IWalletModel wallet) in WalletWasabi.Fluent\WalletWasabi.Fluent.Generators\WalletWasabi.Fluent.Generators.Generators.MainGenerator\WalletCoinsViewModel_UiContext.cs:line 8
   at WalletWasabi.Fluent.ViewModels.Navigation.FluentNavigate.WalletCoins(IWalletModel wallet, NavigationTarget navigationTarget, NavigationMode navigationMode) in WalletWasabi.Fluent\WalletWasabi.Fluent.Generators\WalletWasabi.Fluent.Generators.Generators.MainGenerator\FluentNavigate.g.cs:line 390
   at WalletWasabi.Fluent.ViewModels.Wallets.WalletViewModel.<.ctor>b__8_23() in WalletWasabi.Fluent\ViewModels\Wallets\WalletViewModel.cs:line 112
   at ReactiveUI.ReactiveCommand.<>c__DisplayClass0_0.<Create>b__1(IObserver`1 observer) in /_/src/ReactiveUI/ReactiveCommand/ReactiveCommand.cs:line 105
   at System.Reactive.Linq.QueryLanguage.CreateWithDisposableObservable`1.SubscribeCore(IObserver`1 observer)
   at System.Reactive.ObservableBase`1.Subscribe(IObserver`1 observer)
@soosr
Copy link
Collaborator Author

soosr commented Apr 25, 2024

Debugged this issue, it is related to how the UI handles the models and how they are updated.
Discussed a possible solution with @ichthus1604, which will not just fix this issue, but also free up some resources when they are not needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: ✋Will Do
Development

No branches or pull requests

3 participants