#4316 closed defect (fixed)
[PATCH] OOS on rejoin - recursive template loading (temple of vesta)
Reported by: | elexis | Owned by: | leper |
---|---|---|---|
Priority: | Release Blocker | Milestone: | Alpha 22 |
Component: | UI & Simulation | Keywords: | patch |
Cc: | Patch: |
Description
In the following game with r18902 a client rejoined and triggered an OOS many turns later. It is reproducible with the rejointest.
Attachments (4)
Change History (19)
by , 8 years ago
Attachment: | uran_oos.7z added |
---|
by , 8 years ago
Attachment: | danger89_logs.tar.gz added |
---|
some extra crashes and oos (version 20), could be helpful?
comment:1 by , 8 years ago
Summary: | OOS on rejoin - Ishtar Gate → OOS on rejoin - Missing loyalty regen aura |
---|
Entity 9956, the temple of maxticatrix got the loyalty aura at the host but not for the rejoined client. Rejoin started turn 2287, the foundation was placed on turn 2680, construction finished on roughly turn 2786, OOS on turn 2786.
comment:2 by , 8 years ago
Here is a minimal reproducing test case. Doing a rejointest from turn 2 reproduces the problem.
by , 8 years ago
Attachment: | commands_mini.txt added |
---|
comment:3 by , 8 years ago
More information: the problem happens if the rejoining happens before the foundation is placed. If you rejoin on turn 4 of the minimal test, the problem won't happen.
comment:6 by , 8 years ago
When Init
of the Auras
component of the temple of vesta is called for the rejoined client, this.GetAuraNames()
which parses this.template
already returns the wrong list of auras. I suspect a bug in ParamNode.cpp
.
comment:7 by , 8 years ago
Milestone: | Alpha 21 → Alpha 22 |
---|---|
Priority: | Must Have → Release Blocker |
Summary: | OOS on rejoin - Missing loyalty regen aura → OOS on rejoin - recursive template loading (temple of vesta) |
comment:8 by , 8 years ago
comment:9 by , 8 years ago
Nope, that's the right way to reproduce it. Update to r18910, executing pyrogenesis with the arguments you posted and waiting until turn 46. It should end with the serializationtestfailure message and write those dumps.
comment:10 by , 8 years ago
Got it to work, dunno why it wasn't working earlier.
There seems to be an issue with not resetting the cache in CParamNode, as the call that gets the wrong contents (even though the paramNode itself has the correct ones) returns the cached value which is outdated. So the correct fix would be finding out where we do not reset the cache. (Disabling the caching, fixes the problem, but that might make repeated conversions of the same value (that we are likely to do in a few places, unless someone proves me wrong) slower and shouldn't be done).
comment:11 by , 8 years ago
Thanks for finding that out, I got lost in that file. Disabling cache sounds like a workaround to me too. The only other place of this kind of recursive template loading I could find was the promotion system, but I assume we would have found the bug much earlier if it were directly affected.
(Perhaps you had reverted r18753 manually without reverting the production queue change added in r18911)
by , 8 years ago
Attachment: | 0001-Reset-ParamNode-s-script-cache-in-a-few-edge-cases.-.patch added |
---|
comment:12 by , 8 years ago
Keywords: | patch review added |
---|---|
Owner: | set to |
Status: | new → assigned |
This might reset the cache a bit more than needed, but as that is only setting something to NULL it shouldn't be that bad.
Also note that text only elements with attributes combined with inheritance means that the text itself is lost. (The test can actually be committed before the fix, or in case someone wants to test this.)
comment:15 by , 8 years ago
Keywords: | review removed |
---|---|
Summary: | OOS on rejoin - recursive template loading (temple of vesta) → [PATCH] OOS on rejoin - recursive template loading (temple of vesta) |
Thanks for your patch and the proper approach to write a test that fails before adding the fix! (Don't want to imagine how long it would have taken without your contribution!)
- Fixed mixed leading whitespace in the three `</Test2A> occurances indicated (by this script that is triggered before browsing a diff here)
- Added svn native lineending property for the new files and the other ones in the same directory.
Edit: Should have added your git commit message to the svn commit.
Thanks a lot to Uran finding the replay!!