Need to work around a issue introduced with MAINT-7835. Due to the way the Firestorm
version of the login panel is initialized, setFields() will be called as part of
the panel ctor (via updateServer()), so that the values of the credential textboxes
will never be set when they actually should be
The dynamic_cast is *really* expensive here for >100k inventory items (up to 2s
freezes and there is a virtual function available to get the same information
much faster.
The shared pointer is passed by reference to LLVivoxVoiceClient::deleteSession() where
mSessionsByHandle.erase(iter) removes the last reference causing it to destruct while still
being accessed later on in the function.
The trouble lines are:
U8 * buffer = (U8 *) ALLOCATE_MEM(LLImageBase::getPrivatePool(), total_size);
if (cur_size > 0)
{
memcpy(buffer, mFormattedImage->getData(), cur_size);
}
If 'cur_size > mHttpReplyOffset + append_size' then 'total_size -= src_offset' will cause
total_size to be smaller than cur_size causing a write access violation on the memcpy.
Since the response is invalid it seemed best to make it follow the other failed partial condition.
This occurred after tp'ing away and after the region was already free'ed: in LLHUDManager::updateEffects()
the hud effect is actually not dead yet; update() gets called, detects that the source object is actually
marked dead so calls markDead() itself which releases the held pointer reference to LLVOAvatar which then
finally calls its destructor which calls getRegion() on a region which has already been free'ed creating
a read access violation.
Callstack (from a release build so optimizations obscure things a bit):
LLVOAvatar::logMetricsTimerRecord()
LLVOAvatar::logPendingPhases()
LLVOAvatar::~LLVOAvatar()
[External Code]
LLPointer<LLViewerObject>::unref()
LLHUDEffectLookAt::markDead()
LLHUDManager::updateEffects()
display()
LLAppViewer::frame()
WinMain()