Skip to content

Commit cf2b4db

Browse files
authored
Merge pull request #3706 from secondlife/release/2025.03
Release/2025.03
2 parents b7dd677 + 632a864 commit cf2b4db

File tree

216 files changed

+4236
-1673
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

216 files changed

+4236
-1673
lines changed

.github/workflows/build.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ jobs:
4242
needs: setup
4343
strategy:
4444
matrix:
45-
runner: [windows-large, macos-15-xlarge]
46-
configuration: ${{ fromJSON(needs.setup.outputs.configurations) }}
45+
runner: ${{ fromJson((github.ref_type == 'tag' && startsWith(github.ref, 'refs/tags/Second_Life')) && '["windows-large","macos-15-xlarge"]' || '["windows-latest","macos-15"]') }}
46+
configuration: ${{ fromJson(needs.setup.outputs.configurations) }}
4747
runs-on: ${{ matrix.runner }}
4848
outputs:
4949
viewer_channel: ${{ steps.build.outputs.viewer_channel }}

autobuild.xml

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2039,11 +2039,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
20392039
<key>archive</key>
20402040
<map>
20412041
<key>hash</key>
2042-
<string>191e4ef07a35f7147708415465191ce7622e3012</string>
2042+
<string>a3cc405d48a48a474d05b3de3d28da2005d80037</string>
20432043
<key>hash_algorithm</key>
20442044
<string>sha1</string>
20452045
<key>url</key>
2046-
<string>https://github.com/secondlife/3p-openal-soft/releases/download/v1.23.1-8668009/openal-1.23.1-darwin64-8979520327.tar.zst</string>
2046+
<string>https://github.com/secondlife/3p-openal-soft/releases/download/v1.24.2-r1/openal-1.24.2-r1-darwin64-13245988487.tar.zst</string>
20472047
</map>
20482048
<key>name</key>
20492049
<string>darwin64</string>
@@ -2053,11 +2053,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
20532053
<key>archive</key>
20542054
<map>
20552055
<key>hash</key>
2056-
<string>3bd8c9028ef42bdb43c7422e7d324e213fdb081e</string>
2056+
<string>a2b63f0f85ca156c59ee1d34ef96c8e50b89153c</string>
20572057
<key>hash_algorithm</key>
20582058
<string>sha1</string>
20592059
<key>url</key>
2060-
<string>https://github.com/secondlife/3p-openal-soft/releases/download/v1.23.1-8668009/openal-1.23.1-linux64-8979520327.tar.zst</string>
2060+
<string>https://github.com/secondlife/3p-openal-soft/releases/download/v1.24.2-r1/openal-1.24.2-r1-linux64-13245988487.tar.zst</string>
20612061
</map>
20622062
<key>name</key>
20632063
<string>linux64</string>
@@ -2067,11 +2067,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
20672067
<key>archive</key>
20682068
<map>
20692069
<key>hash</key>
2070-
<string>4b849609abec790e89be5fad8ddee3717ee301c4</string>
2070+
<string>8ad24fba1191c9cb0d2ab36e64b04b4648a99f43</string>
20712071
<key>hash_algorithm</key>
20722072
<string>sha1</string>
20732073
<key>url</key>
2074-
<string>https://github.com/secondlife/3p-openal-soft/releases/download/v1.23.1-8668009/openal-1.23.1-windows64-8979520327.tar.zst</string>
2074+
<string>https://github.com/secondlife/3p-openal-soft/releases/download/v1.24.2-r1/openal-1.24.2-r1-windows64-13245988487.tar.zst</string>
20752075
</map>
20762076
<key>name</key>
20772077
<string>windows64</string>
@@ -3014,14 +3014,15 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
30143014
<key>build</key>
30153015
<map>
30163016
<key>command</key>
3017-
<string>xcodebuild</string>
3017+
<string>cmake</string>
30183018
<key>options</key>
30193019
<array>
3020-
<string>-configuration</string>
3020+
<string>--build</string>
3021+
<string>.</string>
3022+
<string>--config</string>
30213023
<string>RelWithDebInfo</string>
3022-
<string>-project</string>
3023-
<string>SecondLife.xcodeproj</string>
3024-
<string>-parallelizeTargets</string>
3024+
<string>--parallel</string>
3025+
<string>$AUTOBUILD_CPU_COUNT</string>
30253026
</array>
30263027
</map>
30273028
<key>default</key>
@@ -3042,14 +3043,15 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
30423043
<key>build</key>
30433044
<map>
30443045
<key>command</key>
3045-
<string>xcodebuild</string>
3046+
<string>cmake</string>
30463047
<key>options</key>
30473048
<array>
3048-
<string>-configuration</string>
3049+
<string>--build</string>
3050+
<string>.</string>
3051+
<string>--config</string>
30493052
<string>RelWithDebInfo</string>
3050-
<string>-project</string>
3051-
<string>SecondLife.xcodeproj</string>
3052-
<string>-parallelizeTargets</string>
3053+
<string>--parallel</string>
3054+
<string>$AUTOBUILD_CPU_COUNT</string>
30533055
</array>
30543056
</map>
30553057
<key>name</key>
@@ -3072,14 +3074,15 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
30723074
<key>build</key>
30733075
<map>
30743076
<key>command</key>
3075-
<string>xcodebuild</string>
3077+
<string>cmake</string>
30763078
<key>options</key>
30773079
<array>
3078-
<string>-configuration</string>
3080+
<string>--build</string>
3081+
<string>.</string>
3082+
<string>--config</string>
30793083
<string>Release</string>
3080-
<string>-project</string>
3081-
<string>SecondLife.xcodeproj</string>
3082-
<string>-parallelizeTargets</string>
3084+
<string>--parallel</string>
3085+
<string>$AUTOBUILD_CPU_COUNT</string>
30833086
</array>
30843087
</map>
30853088
<key>name</key>
@@ -3098,14 +3101,15 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
30983101
<key>build</key>
30993102
<map>
31003103
<key>command</key>
3101-
<string>xcodebuild</string>
3104+
<string>cmake</string>
31023105
<key>options</key>
31033106
<array>
3104-
<string>-configuration</string>
3107+
<string>--build</string>
3108+
<string>.</string>
3109+
<string>--config</string>
31053110
<string>Release</string>
3106-
<string>-project</string>
3107-
<string>SecondLife.xcodeproj</string>
3108-
<string>-parallelizeTargets</string>
3111+
<string>--parallel</string>
3112+
<string>$AUTOBUILD_CPU_COUNT</string>
31093113
</array>
31103114
</map>
31113115
<key>name</key>

indra/cmake/00-Common.cmake

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ add_compile_definitions(BOOST_BIND_GLOBAL_PLACEHOLDERS)
3434

3535
# Force enable SSE2 instructions in GLM per the manual
3636
# https://github.com/g-truc/glm/blob/master/manual.md#section2_10
37-
add_compile_definitions(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES=1 GLM_FORCE_SSE2=1)
37+
add_compile_definitions(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES=1 GLM_FORCE_SSE2=1 GLM_ENABLE_EXPERIMENTAL=1)
3838

3939
# Configure crash reporting
4040
set(RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in release builds")
@@ -48,6 +48,11 @@ if(NON_RELEASE_CRASH_REPORTING)
4848
add_compile_definitions( LL_SEND_CRASH_REPORTS=1)
4949
endif()
5050

51+
set(USE_LTO OFF CACHE BOOL "Enable Link Time Optimization")
52+
if(USE_LTO)
53+
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
54+
endif()
55+
5156
# Don't bother with a MinSizeRel or Debug builds.
5257
set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release" CACHE STRING "Supported build types." FORCE)
5358

@@ -101,7 +106,7 @@ if (WINDOWS)
101106

102107
#ND: When using something like buildcache (https://github.com/mbitsnbites/buildcache)
103108
# to make those wrappers work /Zi must be changed to /Z7, as /Zi due to it's nature is not compatible with caching
104-
if( ${CMAKE_CXX_COMPILER_LAUNCHER} MATCHES ".*cache.*")
109+
if(${CMAKE_CXX_COMPILER_LAUNCHER} MATCHES ".*cache.*")
105110
add_compile_options( /Z7 )
106111
string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
107112
string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")

indra/llappearance/llavatarappearance.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,6 @@ void LLAvatarAppearance::buildCharacter()
799799
bool status = loadAvatar();
800800
stop_glerror();
801801

802-
// gPrintMessagesThisFrame = true;
803802
LL_DEBUGS() << "Avatar load took " << timer.getElapsedTimeF32() << " seconds." << LL_ENDL;
804803

805804
if (!status)

indra/llappearance/llpolymesh.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -981,7 +981,7 @@ void LLPolyMesh::initializeForMorph()
981981
LLVector4a::memcpyNonAliased16((F32*) mScaledNormals, (F32*) mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices);
982982
LLVector4a::memcpyNonAliased16((F32*) mBinormals, (F32*) mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices);
983983
LLVector4a::memcpyNonAliased16((F32*) mScaledBinormals, (F32*) mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices);
984-
LLVector4a::memcpyNonAliased16((F32*) mTexCoords, (F32*) mSharedData->mTexCoords, sizeof(LLVector2) * (mSharedData->mNumVertices + mSharedData->mNumVertices%2));
984+
memcpy((F32*) mTexCoords, (F32*) mSharedData->mTexCoords, sizeof(LLVector2) * (mSharedData->mNumVertices)); // allocated in LLPolyMeshSharedData::allocateVertexData
985985

986986
for (S32 i = 0; i < mSharedData->mNumVertices; ++i)
987987
{

indra/llappearance/llwearable.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -645,9 +645,10 @@ void LLWearable::addVisualParam(LLVisualParam *param)
645645

646646
void LLWearable::setVisualParamWeight(S32 param_index, F32 value)
647647
{
648-
if( is_in_map(mVisualParamIndexMap, param_index ) )
648+
visual_param_index_map_t::iterator found = mVisualParamIndexMap.find(param_index);
649+
if(found != mVisualParamIndexMap.end())
649650
{
650-
LLVisualParam *wearable_param = mVisualParamIndexMap[param_index];
651+
LLVisualParam *wearable_param = found->second;
651652
wearable_param->setWeight(value);
652653
}
653654
else
@@ -658,10 +659,10 @@ void LLWearable::setVisualParamWeight(S32 param_index, F32 value)
658659

659660
F32 LLWearable::getVisualParamWeight(S32 param_index) const
660661
{
661-
if( is_in_map(mVisualParamIndexMap, param_index ) )
662+
visual_param_index_map_t::const_iterator found = mVisualParamIndexMap.find(param_index);
663+
if(found != mVisualParamIndexMap.end())
662664
{
663-
const LLVisualParam *wearable_param = mVisualParamIndexMap.find(param_index)->second;
664-
return wearable_param->getWeight();
665+
return found->second->getWeight();
665666
}
666667
else
667668
{
@@ -726,7 +727,7 @@ void LLWearable::writeToAvatar(LLAvatarAppearance* avatarp)
726727
if (!avatarp) return;
727728

728729
// Pull params
729-
for( LLVisualParam* param = avatarp->getFirstVisualParam(); param; param = avatarp->getNextVisualParam() )
730+
for( const LLVisualParam* param = avatarp->getFirstVisualParam(); param; param = avatarp->getNextVisualParam() )
730731
{
731732
// cross-wearable parameters are not authoritative, as they are driven by a different wearable. So don't copy the values to the
732733
// avatar object if cross wearable. Cross wearable params get their values from the avatar, they shouldn't write the other way.

indra/llaudio/llaudioengine_openal.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ bool LLAudioEngine_OpenAL::init(void* userdata, const std::string &app_title)
7979
ALCdevice *device = alcGetContextsDevice(alcGetCurrentContext());
8080

8181
alcGetIntegerv(device, ALC_MAJOR_VERSION, 1, &major);
82-
alcGetIntegerv(device, ALC_MAJOR_VERSION, 1, &minor);
82+
alcGetIntegerv(device, ALC_MINOR_VERSION, 1, &minor);
8383
LL_INFOS() << "ALC version: " << major << "." << minor << LL_ENDL;
8484

8585
LL_INFOS() << "ALC default device: "
@@ -190,6 +190,8 @@ LLAudioChannelOpenAL::~LLAudioChannelOpenAL()
190190
void LLAudioChannelOpenAL::cleanup()
191191
{
192192
alSourceStop(mALSource);
193+
alSourcei(mALSource, AL_BUFFER, AL_NONE);
194+
193195
mCurrentBufferp = NULL;
194196
}
195197

indra/llcommon/llapp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ class LL_COMMON_API LLApp
282282
LLRunner& getRunner() { return mRunner; }
283283

284284
#ifdef LL_WINDOWS
285-
virtual void reportCrashToBugsplat(void* pExcepInfo /*EXCEPTION_POINTERS*/) { }
285+
virtual bool reportCrashToBugsplat(void* pExcepInfo /*EXCEPTION_POINTERS*/) { return false; }
286286
#endif
287287

288288
public:

indra/llcommon/llcoros.cpp

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -310,26 +310,55 @@ namespace
310310

311311
static const U32 STATUS_MSC_EXCEPTION = 0xE06D7363; // compiler specific
312312

313-
U32 exception_filter(U32 code, struct _EXCEPTION_POINTERS *exception_infop)
313+
U32 exception_filter(U32 code, struct _EXCEPTION_POINTERS* exception_infop)
314314
{
315-
if (code == STATUS_MSC_EXCEPTION)
315+
if (LLApp::instance()->reportCrashToBugsplat((void*)exception_infop))
316+
{
317+
// Handled
318+
return EXCEPTION_CONTINUE_SEARCH;
319+
}
320+
else if (code == STATUS_MSC_EXCEPTION)
316321
{
317322
// C++ exception, go on
318323
return EXCEPTION_CONTINUE_SEARCH;
319324
}
320325
else
321326
{
322-
// handle it
327+
// handle it, convert to std::exception
323328
return EXCEPTION_EXECUTE_HANDLER;
324329
}
330+
331+
return EXCEPTION_CONTINUE_SEARCH;
325332
}
326333

327-
void sehandle(const LLCoros::callable_t& callable)
334+
void cpphandle(const LLCoros::callable_t& callable, const std::string& name)
328335
{
329-
__try
336+
// SE and C++ can not coexists, thus two handlers
337+
try
330338
{
331339
callable();
332340
}
341+
catch (const LLCoros::Stop& exc)
342+
{
343+
LL_INFOS("LLCoros") << "coroutine " << name << " terminating because "
344+
<< exc.what() << LL_ENDL;
345+
}
346+
catch (const LLContinueError&)
347+
{
348+
// Any uncaught exception derived from LLContinueError will be caught
349+
// here and logged. This coroutine will terminate but the rest of the
350+
// viewer will carry on.
351+
LOG_UNHANDLED_EXCEPTION(STRINGIZE("coroutine " << name));
352+
}
353+
}
354+
355+
void sehandle(const LLCoros::callable_t& callable, const std::string& name)
356+
{
357+
__try
358+
{
359+
// handle stop and continue exceptions first
360+
cpphandle(callable, name);
361+
}
333362
__except (exception_filter(GetExceptionCode(), GetExceptionInformation()))
334363
{
335364
// convert to C++ styled exception
@@ -340,16 +369,7 @@ void sehandle(const LLCoros::callable_t& callable)
340369
throw std::exception(integer_string);
341370
}
342371
}
343-
344-
#else // ! LL_WINDOWS
345-
346-
inline void sehandle(const LLCoros::callable_t& callable)
347-
{
348-
callable();
349-
}
350-
351-
#endif // ! LL_WINDOWS
352-
372+
#endif // LL_WINDOWS
353373
} // anonymous namespace
354374

355375
// Top-level wrapper around caller's coroutine callable.
@@ -362,10 +382,14 @@ void LLCoros::toplevel(std::string name, callable_t callable)
362382
// set it as current
363383
mCurrent.reset(&corodata);
364384

385+
#ifdef LL_WINDOWS
386+
// can not use __try directly, toplevel requires unwinding, thus use of a wrapper
387+
sehandle(callable, name);
388+
#else // LL_WINDOWS
365389
// run the code the caller actually wants in the coroutine
366390
try
367391
{
368-
sehandle(callable);
392+
callable();
369393
}
370394
catch (const Stop& exc)
371395
{
@@ -387,6 +411,7 @@ void LLCoros::toplevel(std::string name, callable_t callable)
387411
<< name << LL_ENDL;
388412
LLCoros::instance().saveException(name, std::current_exception());
389413
}
414+
#endif // else LL_WINDOWS
390415
}
391416

392417
//static

indra/llcommon/lldate.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,15 @@ std::string LLDate::asRFC1123() const
7777
return toHTTPDateString (std::string ("%A, %d %b %Y %H:%M:%S GMT"));
7878
}
7979

80+
std::string LLDate::toLocalDateString (std::string fmt) const
81+
{
82+
LL_PROFILE_ZONE_SCOPED;
83+
84+
time_t locSeconds = (time_t) mSecondsSinceEpoch;
85+
struct tm * lt = localtime (&locSeconds);
86+
return toHTTPDateString(lt, fmt);
87+
}
88+
8089
std::string LLDate::toHTTPDateString (std::string fmt) const
8190
{
8291
LL_PROFILE_ZONE_SCOPED;

0 commit comments

Comments
 (0)