Closed smoogipoo closed 6 years ago
Ok, so what's happening here is that the SongSelect
starts an async load for the PlayerLoader
(and pushes it when done) which in turn loads the Player
(and pushes it when done), so the second exception would be explainable like this:
PlayerLoader
and starts loading the Player
.SongSelect
and starts another map.PlayerLoader
and starts loading a different Player
.Player
finishes loading and tries to push itself to the first PlayerLoader
which is not current anymore and throws this.The first exception is a little less clear to me.. This is the code in question that throws the exception:
private static Accessor getAccessor(string propertyOrFieldName)
{
Accessor result;
if (accessors.TryGetValue(propertyOrFieldName, out result))
return result;
result = findAccessor(typeof(T), propertyOrFieldName);
accessors.Add(propertyOrFieldName, result);
return result;
}
So what happens here, apparently, is that TryGetValue
returns false, then findAccessor is called (and supposedly finds something), and when it tries to add it to the Dictionary<Accessor> accessors
, the exception is thrown with the error "An item with the same key already exists" (the key is 'Position' btw, so this comes from a .MoveTo
call).
The key propertyOrFieldName
is not changed anywhere in this (and not in findAccessor
), so this is probably a threading issue..?
The cannot push to an already exited screen
exception will most likely be fixed by this. Haven't tested it yet though.
The other one is probably coming from inside PlayerLoader.LogoArriving
.. not completely sure yet
@peppy Is this fixed?
no idea
Can't reproduce this any more.
Possible framework fix required.
I have experienced multiple stacktraces here, so I'll try to post all the different ones that I get. The following is by far the most common: