XF-Material-Library icon indicating copy to clipboard operation
XF-Material-Library copied to clipboard

Quick tapping crashes MaterialSnackbar

Open RedCaplan opened this issue 3 years ago • 2 comments

🐛 Bug Report

If the UI thread is busy, or a weak device is used, then it becomes possible to call ActionButton.Command multiple times with quick clicks, as a result, after the second pressing InputTaskCompletionSource?.SetResult throws an exception

Is there any reason not to use TrySetResult ?

 internal MaterialSnackbar(string message, string actionButtonText, int msDuration = DurationLong, MaterialSnackbarConfiguration configuration = null)
        {
            ...
            var primaryActionCommand = new Command(async () =>
            {
                _primaryActionRunning = true;
                await DismissAsync();
                InputTaskCompletionSource?.TrySetResult(true);
            }, () => !_primaryActionRunning);
            ...
        }

Stack trace

XF.Material.Forms.UI.Dialogs.MaterialSnackbar.<.ctor>b__6_0 () [0x0007a] in <3cfa98f1ecd344d8b7c2286276967650>:0;XF.Material.Forms.UI.Dialogs.MaterialSnackbar

TaskCompletionSource`1[TResult].SetResult (TResult result)
<.ctor>b__6_0 ()
AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state)
SyncContext+<>c__DisplayClass2_0.<Post>b__0 ()
Thread+RunnableImplementor.Run ()
IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this)

Reason

System.InvalidOperationException: System.InvalidOperationException

Expected behavior

The app should not crash

Reproduction steps

Configuration

Version: 1.x

Platform:

  • [ ] :iphone: iOS
  • [x] :robot: Android
  • [ ] :checkered_flag: WPF
  • [ ] :earth_americas: UWP
  • [ ] :apple: MacOS
  • [ ] :tv: tvOS
  • [ ] :monkey: Xamarin.Forms

RedCaplan avatar Dec 03 '20 16:12 RedCaplan

I've come across this issue too, however, the exception wasn't fatal if handled. Have you tested this in release mode?

ske66 avatar Dec 04 '20 10:12 ske66

Re-met with this crash. Now with more detailed stacktrace

<.ctor>b__6_0 () System.InvalidOperationException: System.InvalidOperationException

Stack trace

XF.Material.Forms.UI.Dialogs.MaterialSnackbar.<.ctor>b__6_0 () [0x00070] in /Users/martijn/Documents/OpenSource/XF-Material-Library/XF.Material/UI/Dialogs/MaterialSnackbar.xaml.cs:31;XF.Material.Forms.UI.Dialogs.MaterialSnackbar

TaskCompletionSource`1[TResult].SetResult (TResult result) /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/TaskCompletionSource.cs:298
<.ctor>b__6_0 () /Users/martijn/Documents/OpenSource/XF-Material-Library/XF.Material/UI/Dialogs/MaterialSnackbar.xaml.cs:31
AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1021
SyncContext+<>c__DisplayClass2_0.<Post>b__0 ()
Thread+RunnableImplementor.Run ()
IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this)

RedCaplan avatar Dec 17 '20 09:12 RedCaplan