Ansariel 2024-10-18 10:17:29 +02:00
commit 3de628f1ce
7 changed files with 19 additions and 29 deletions

View File

@ -1817,9 +1817,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>26b0386266b7bdbf7907fa4ee8cb7b27</string>
<string>9f70048bed4c3fc487bee9e9f4276037</string>
<key>url</key>
<string>file:///opt/firestorm/llphysicsextensions_tpv-1.0.10206976532-darwin64-10206976532.tar.bz2</string>
<string>file:///opt/firestorm/llphysicsextensions_tpv-1.0.11371371972-darwin64-11371371972.tar.bz2</string>
</map>
<key>name</key>
<string>darwin64</string>
@ -1841,9 +1841,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>bd24b6c7c62922b06340ec73bd147483</string>
<string>31daa8f133168cc9ab500aa3a235b63c</string>
<key>url</key>
<string>file:///c:/cygwin/opt/firestorm/llphysicsextensions_tpv-1.0.10206976532-windows64-10206976532.tar.bz2</string>
<string>file:///c:/cygwin/opt/firestorm/llphysicsextensions_tpv-1.0.11371371972-windows64-11371371972.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>

View File

@ -1659,19 +1659,3 @@ namespace LLError
sLocalizedOutOfMemoryWarning = message;
}
}
void crashdriver(void (*callback)(int*))
{
// The LLERROR_CRASH macro used to have inline code of the form:
//int* make_me_crash = NULL;
//*make_me_crash = 0;
// But compilers are getting smart enough to recognize that, so we must
// assign to an address supplied by a separate source file. We could do
// the assignment here in crashdriver() -- but then BugSplat would group
// all LL_ERRS() crashes as the fault of this one function, instead of
// identifying the specific LL_ERRS() source line. So instead, do the
// assignment in a lambda in the caller's source. We just provide the
// nullptr target.
callback(nullptr);
}

View File

@ -420,9 +420,11 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
#define LL_NEWLINE '\n'
// Use this only in LL_ERRS or in a place that LL_ERRS may not be used
#define LLERROR_CRASH \
{ \
crashdriver([](int* ptr){ *ptr = 0; exit(*ptr); }); \
#define LLERROR_CRASH \
{ \
int* make_me_crash = (int*)0xDEADBEEFDEADBEEFUL; \
*make_me_crash = 0; \
exit(*make_me_crash); \
}
#define LL_ENDL \
@ -524,7 +526,4 @@ LL_DEBUGS("SomeTag") performs the locking and map-searching ONCE, then caches
the result in a static variable.
*/
// used by LLERROR_CRASH
void crashdriver(void (*)(int*));
#endif // LL_LLERROR_H

View File

@ -1048,7 +1048,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
<integer>1</integer>
</map>
<key>FSSupportGroupChatPrefixTesting</key>
<map>
@ -1059,7 +1059,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
<integer>1</integer>
</map>
<key>AutoCloseOOC</key>
<map>

View File

@ -1789,6 +1789,7 @@ bool LLAppViewer::doFrame()
display();
if (LLStartUp::getStartupState() > STATE_AGENT_WAIT) // <FS:Beq/> FIRE-34590 - Bugsplat caused by updating maps before world is loaded.
{
LLPerfStats::RecordSceneTime T(LLPerfStats::StatType_t::RENDER_IDLE);
LL_PROFILE_ZONE_NAMED_CATEGORY_APP("df Snapshot");

View File

@ -152,6 +152,12 @@ void LLDrawPoolWater::renderPostDeferred(S32 pass)
LLEnvironment& environment = LLEnvironment::instance();
LLSettingsWater::ptr_t pwater = environment.getCurrentWater();
LLSettingsSky::ptr_t psky = environment.getCurrentSky();
// <FS:Beq> FIRE-34590 - Bugsplat Crash typically in startup state, due to null water.
if (!pwater || !psky)
{
LL_WARNS() << "LLDrawPoolWater::renderPostDeferred: water or sky settings not available" << LL_ENDL;
}
// </FS:Beq>
LLVector3 light_dir = environment.getLightDirection();
bool sun_up = environment.getIsSunUp();
bool moon_up = environment.getIsMoonUp();

View File

@ -1057,7 +1057,7 @@ void LLTerrainPartition::getGeometry(LLSpatialGroup* group)
}
const bool has_tangents = tangents_start.get() != nullptr;
if (has_tangents)
if (has_tangents && index_offset > 0) // <FS:Beq/> FIRE-34672 OPENSIM bugsplat crash
{
LLStrider<LLVector3> vertices = vertices_start;
LLStrider<LLVector3> normals = normals_start;