Fixed
Status Update
Comments
il...@google.com <il...@google.com> #2
Yigit, do you have time to fix it?
reemission of the same liveData is racy
reemission of the same liveData is racy
ap...@google.com <ap...@google.com> #3
yea i'll take it.
ap...@google.com <ap...@google.com> #4
Thanks for the detailed analysis. This may not be an issue anymore since we've started using Main.immediate there but I' not sure; I'll try to create a test case.
cl...@google.com <cl...@google.com> #5
just emitting same live data reproduces the issue.
@Test
fun raceTest() {
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData)
emitSource(subLiveData) //crashes
}
subject.addObserver().apply {
testScope.advanceUntilIdle()
}
}
@Test
fun raceTest() {
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData)
emitSource(subLiveData) //crashes
}
subject.addObserver().apply {
testScope.advanceUntilIdle()
}
}
pr...@google.com <pr...@google.com> #6
With 2.2.0-alpha04 (that use Main.immediate), the issue seems to be still there (I tested it by calling emitSource() twice, like your test case)
Description
Component used: Navigation Version used: 2.8.0-beta04 Devices/Android versions reproduced on: all
Duplicate destinations in a navigation graph are allowed but can lead to indeterminate behavior at run time. Consider the following code which creates two nested nav graphs that share a destination:
DetailRoute
.If you navigate from
ListRoute
toDetailRoute
it is undetermined whether the resulting destination will have a parent ofHomeNavRoute
orListNavRoute
. If we follow the rule of "whichever destination is defined first in the navigation graph will be used" then destination with parentListNavRoute
should be used, however, in my tests,DetailRoute
's parent isHomeNavRoute
(which is defined second in the nav graph).Perhaps adding a duplicate destination should be a compile-time error or warning.