Skip to content
This repository has been archived by the owner on Feb 20, 2023. It is now read-only.

Crash: While closing multiple tabs and doing Undo - java.lang.IllegalArgumentException: Tab with same ID already exists #23583

Closed
sunilk9211235 opened this issue Feb 5, 2022 · 5 comments
Assignees
Labels
b:crash Crashes Fenix: should link to Sentry, Crash-Stats or GPlay info 🐞 bug Crashes, Something isn't working, .. Feature:Tabs
Milestone

Comments

@sunilk9211235
Copy link
Contributor

sunilk9211235 commented Feb 5, 2022

Steps to reproduce

Found this when reproducing #23582 .

  1. Have multiple active tabs
  2. Open tabs tray, close and Undo multiple selected tabs

Expected behaviour

Should not cause crash.

Actual behaviour

It's crashing.

Device name

Xiaomi Redmi 9A

Android version

Android 10

Firefox release type

Firefox Nightly

Firefox version

98.0

Device logs

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:994) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) ... 1 more Caused by: mozilla.components.lib.state.StoreException: Exception while reducing state at mozilla.components.lib.state.Store$exceptionHandler$1$1.run(Store.kt:1) at android.os.Handler.handleCallback(Handler.java:914) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:225) at android.app.ActivityThread.main(ActivityThread.java:7563) ... 3 more Caused by: java.lang.IllegalArgumentException: Tab with same ID already exists at mozilla.components.browser.state.reducer.TabListReducerKt.access$requireUniqueTab(TabListReducer.kt:4) at mozilla.components.browser.state.reducer.TabListReducer.reduce(TabListReducer.kt:156) at mozilla.components.browser.state.store.BrowserStore$1.invoke(BrowserStore.kt:356) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$chain$1.invoke(ReducerChainBuilder.kt:7) at mozilla.components.browser.state.engine.middleware.CrashMiddleware.invoke(CrashMiddleware.kt:3) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.browser.state.engine.middleware.WebExtensionMiddleware.invoke(WebExtensionMiddleware.kt:15) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.browser.state.engine.middleware.SuspendMiddleware.invoke(SuspendMiddleware.kt:9) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.browser.state.engine.middleware.TabsRemovedMiddleware.invoke(TabsRemovedMiddleware.kt:24) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.browser.state.engine.middleware.LinkingMiddleware.invoke(LinkingMiddleware.kt:21) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.browser.state.engine.middleware.CreateEngineSessionMiddleware.invoke(CreateEngineSessionMiddleware.kt:18) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.browser.state.engine.middleware.EngineDelegateMiddleware.invoke(EngineDelegateMiddleware.kt:23) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at org.mozilla.fenix.tabstray.SearchTermTabGroupMiddleware.invoke(SearchTermTabGroupMiddleware.kt:3) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at org.mozilla.fenix.historymetadata.HistoryMetadataMiddleware.invoke(HistoryMetadataMiddleware.kt:50) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.feature.media.middleware.LastMediaAccessMiddleware.invoke(LastMediaAccessMiddleware.kt:3) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.feature.search.middleware.AdsTelemetryMiddleware.invoke(AdsTelemetryMiddleware.kt:51) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.feature.prompts.PromptMiddleware.invoke(PromptMiddleware.kt:18) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.feature.media.middleware.RecordingDevicesMiddleware.invoke(RecordingDevicesMiddleware.kt:3) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.feature.search.middleware.SearchMiddleware.invoke(SearchMiddleware.kt:12) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.feature.search.region.RegionMiddleware.invoke(RegionMiddleware.kt:7) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.feature.session.middleware.undo.UndoMiddleware.invoke(UndoMiddleware.kt:36) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.browser.thumbnails.ThumbnailsMiddleware.invoke(ThumbnailsMiddleware.kt:46) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at org.mozilla.fenix.telemetry.TelemetryMiddleware.invoke(TelemetryMiddleware.kt:29) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.feature.readerview.ReaderViewMiddleware.invoke(ReaderViewMiddleware.kt:43) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.feature.downloads.DownloadMiddleware.invoke(DownloadMiddleware.kt:66) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.feature.recentlyclosed.RecentlyClosedMiddleware.invoke(RecentlyClosedMiddleware.kt:47) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.feature.session.middleware.LastAccessMiddleware.invoke(LastAccessMiddleware.kt:8) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$threadCheck$1.invoke(ReducerChainBuilder.kt:10) at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3) at mozilla.components.lib.state.Store$dispatch$1.invokeSuspend(Store.kt:4) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:3) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:18) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919)

Additional information

No response

┆Issue is synchronized with this Jira Task

@sunilk9211235 sunilk9211235 added needs:triage Issue needs triage 🐞 bug Crashes, Something isn't working, .. labels Feb 5, 2022
@sunilk9211235 sunilk9211235 changed the title [Bug]: Crash: While closing and doing Undo for closed tabs - java.lang.IllegalArgumentException: Tab with same ID already exists Crash: While closing and doing Undo for closed tabs - java.lang.IllegalArgumentException: Tab with same ID already exists Feb 5, 2022
@sunilk9211235 sunilk9211235 changed the title Crash: While closing and doing Undo for closed tabs - java.lang.IllegalArgumentException: Tab with same ID already exists Crash: While closing multiple tabs and doing Undo - java.lang.IllegalArgumentException: Tab with same ID already exists Feb 5, 2022
@mcarare mcarare added the b:crash Crashes Fenix: should link to Sentry, Crash-Stats or GPlay info label Feb 7, 2022
@kbrosnan kbrosnan added Feature:Tabs and removed needs:triage Issue needs triage labels Feb 7, 2022
@Mugurell Mugurell self-assigned this Feb 8, 2022
@Mugurell
Copy link
Contributor

Mugurell commented Feb 8, 2022

This just seems the effect of #23582 so will look into how can that issue be prevented.

@Mugurell
Copy link
Contributor

Mugurell commented Feb 8, 2022

This should be rechecked after #23435 which seems to address the same underlying issue.

@Alexandru2909
Copy link
Contributor

The changes in 23435 have been merged. I tried to reproduce the crash but it seems fixed. @sunilk9211 can you please check if you can reproduce the issue ?

@sunilk9211235
Copy link
Contributor Author

@Alexandru2909 It seems fixed to me also. Could not reproduce it.

@AndiAJ
Copy link
Collaborator

AndiAJ commented Feb 10, 2022

Seems to be fixed on the latest Nightly, on the other hand, it's reproducible on Firefox 98.0.0 Beta 1 using a OnePlus A3 Android 6.0.1

Prerequisites:
Open the wikipedia in 2 different tabs
Have another website opened
One of the wikipedia pages should be your active tab

STR:

  1. Long press and selecte all 3 tabs
  2. Put the app in background
  3. Select again the active wikipedia tab, because of [Bug]Tab selection checkmark disappears after background/resume #16685 the checkmark from the active tab will disappear
  4. Put the app in background
  5. Close all tabs using the option from the ⋮ button
  6. Undo deletion
  7. Check the restored tabs
  8. You'll have one extra wikipedia page restored and 2 highlighted wikipedia pages
  9. Swipe close your active wikipedia tab
20220210_060813.mp4

ee1b167b-a8cd-41c9-bdae-911d5261a7f7
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException


java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
... 1 more
Caused by: mozilla.components.lib.state.StoreException: Exception while reducing state
at mozilla.components.lib.state.Store$exceptionHandler$1$1.run(Store.kt:1)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:152)
at android.app.ActivityThread.main(ActivityThread.java:5507)
... 3 more
Caused by: java.lang.IllegalArgumentException: Tab with same ID already exists
at mozilla.components.browser.state.reducer.TabListReducerKt.access$requireUniqueTab(TabListReducer.kt:4)
at mozilla.components.browser.state.reducer.TabListReducer.reduce(TabListReducer.kt:156)
at mozilla.components.browser.state.store.BrowserStore$1.invoke(BrowserStore.kt:356)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$chain$1.invoke(ReducerChainBuilder.kt:7)
at mozilla.components.browser.state.engine.middleware.CrashMiddleware.invoke(CrashMiddleware.kt:3)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.browser.state.engine.middleware.WebExtensionMiddleware.invoke(WebExtensionMiddleware.kt:15)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.browser.state.engine.middleware.SuspendMiddleware.invoke(SuspendMiddleware.kt:9)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.browser.state.engine.middleware.TabsRemovedMiddleware.invoke(TabsRemovedMiddleware.kt:24)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.browser.state.engine.middleware.LinkingMiddleware.invoke(LinkingMiddleware.kt:21)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.browser.state.engine.middleware.CreateEngineSessionMiddleware.invoke(CreateEngineSessionMiddleware.kt:18)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.browser.state.engine.middleware.EngineDelegateMiddleware.invoke(EngineDelegateMiddleware.kt:23)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at org.mozilla.fenix.tabstray.SearchTermTabGroupMiddleware.invoke(SearchTermTabGroupMiddleware.kt:3)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at org.mozilla.fenix.historymetadata.HistoryMetadataMiddleware.invoke(HistoryMetadataMiddleware.kt:50)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.feature.media.middleware.LastMediaAccessMiddleware.invoke(LastMediaAccessMiddleware.kt:3)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.feature.search.middleware.AdsTelemetryMiddleware.invoke(AdsTelemetryMiddleware.kt:51)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.feature.prompts.PromptMiddleware.invoke(PromptMiddleware.kt:18)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.feature.media.middleware.RecordingDevicesMiddleware.invoke(RecordingDevicesMiddleware.kt:3)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.feature.search.middleware.SearchMiddleware.invoke(SearchMiddleware.kt:12)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.feature.search.region.RegionMiddleware.invoke(RegionMiddleware.kt:7)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.feature.session.middleware.undo.UndoMiddleware.invoke(UndoMiddleware.kt:36)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.browser.thumbnails.ThumbnailsMiddleware.invoke(ThumbnailsMiddleware.kt:46)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at org.mozilla.fenix.telemetry.TelemetryMiddleware.invoke(TelemetryMiddleware.kt:29)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.feature.readerview.ReaderViewMiddleware.invoke(ReaderViewMiddleware.kt:43)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.feature.downloads.DownloadMiddleware.invoke(DownloadMiddleware.kt:66)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.feature.recentlyclosed.RecentlyClosedMiddleware.invoke(RecentlyClosedMiddleware.kt:47)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.feature.session.middleware.LastAccessMiddleware.invoke(LastAccessMiddleware.kt:8)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$threadCheck$1.invoke(ReducerChainBuilder.kt:10)
at mozilla.components.lib.state.internal.ReducerChainBuilder$build$1$1.invoke(ReducerChainBuilder.kt:3)
at mozilla.components.lib.state.Store$dispatch$1.invokeSuspend(Store.kt:4)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:3)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:18)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
b:crash Crashes Fenix: should link to Sentry, Crash-Stats or GPlay info 🐞 bug Crashes, Something isn't working, .. Feature:Tabs
Projects
None yet
Development

No branches or pull requests

6 participants