The "wait for server response" return value was short-circuiting the
"already done" value. The previous commit fixed always needing a new
instance, exposing this problem.
The affected code was ported from H'uru where NetVaultNode has a zeroing
constructor. OU does not have a zeroing constructor for this class, and
instead assumes that all allocations will be done with NEWZERO (there is
a debug mode assertion to this effect). The result of the improper
allocation is that the node fields flag could be garbage, causing a
vault node with random contents to be written to the server.
Unfortunately, NetVaultNode::Read_LCS is not extremely resilient to
reading in unexpected data, so this may result in a crash.
H'Uru PR #719 commit log:
commit 5f53b86494605c484c0b304e0a5ab15a07929106
Author: Adam Johnson <AdamJohnso@gmail.com>
Date: Fri Sep 4 07:38:15 2020 -0400
Fix an infinite loop in plDXPipeline.
This was observed in a 2x2 DXT1 mipmap produced by Korman. While Korman
should probably force such a thing to be uncompressed, the pipeline
should also not be able to enter such an obviously invalid state.
M Sources/Plasma/PubUtilLib/plPipeline/DX/plDXPipeline.cpp
Some of the Python code expects for explicit Age initialization to
complete immediately. Rewriting that would be something of a chore, so
this will prevent first time clicks on the Er'cana and Ahnoying
Cathedral books from causing a perma-stick.
Homologue of H'uru commit ec0aecd202
Per testing on Minkata, suppressing callbacks during all vault downloads
has a deleterious effect on imagers. While my high level assumption is
correct, vault downloads can encompass situations where we want
notifications (eg re-downloading imager inbox folders, new age info
vault fragments). Whoops!
On MOULa, there have been complaints about linking to some Neighborhoods
and activating some players taking a very long time. One of these
Neighborhoods in particular is the "DRC(67) Bevin". When I attempted to
link to this Age, I found the link took approximately 85 seconds each
time. On profiling, I discovered that for every node downloaded during
the initialization phase, we were calling into Python at least once.
Suppressing vault callbacks during times when they are obviously going
to storm and be useless decreases the link time to 7 seconds.
H-uru:
From f45679a54f Mon Sep 17 00:00:00 2001
From: Adam Johnson <AdamJohnso@gmail.com>
Date: Sun, 15 Jan 2012 18:35:05 -0500
Subject: [PATCH] Make pyVault::AddChronicleEntry a blocking operation to avoid
a race condition
Fixes a reference counting issue that prevents non-DirectXCompressed
mipmaps from being used in GUI Lists (eg as icons for avatar clothing).
All future clothing PRPs produced by CreateClothingPRP.py will depend on
this change.