Skip to content

Commit 5804b88

Browse files
authored
Merge branch 'develop' into release/2025.06
2 parents 2a3fa69 + cefee59 commit 5804b88

Some content is hidden

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

71 files changed

+552
-1743
lines changed

.gitattributes

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
* text eol=lf
22

3-
# VSTool (normalization disabled)
4-
indra/tools/vstool/* -text
5-
63
# Images
74
*.bmp binary
85
*.BMP binary

.github/workflows/qatest.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,11 @@ jobs:
4343
artifact: Windows-installer
4444
install-path: 'C:\viewer-automation-main'
4545
- os: windows
46-
runner: qa-dan-asus
46+
runner: qa-windows-asus-dan
47+
artifact: Windows-installer
48+
install-path: 'C:\viewer-automation-main'
49+
- os: windows
50+
runner: qa-windows-z600-dan
4751
artifact: Windows-installer
4852
install-path: 'C:\viewer-automation-main'
4953
- os: mac

autobuild.xml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1435,11 +1435,11 @@
14351435
<key>creds</key>
14361436
<string>github</string>
14371437
<key>hash</key>
1438-
<string>9e59c93c7110e87b4ff3db330f11a23c50e5000f</string>
1438+
<string>7facda95e2f00c260513f3d4db42588fa8ba703c</string>
14391439
<key>hash_algorithm</key>
14401440
<string>sha1</string>
14411441
<key>url</key>
1442-
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/178910560</string>
1442+
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/196289774</string>
14431443
</map>
14441444
<key>name</key>
14451445
<string>darwin64</string>
@@ -1451,11 +1451,11 @@
14511451
<key>creds</key>
14521452
<string>github</string>
14531453
<key>hash</key>
1454-
<string>7ed994db5bafa9a7ad09a1b53da850a84715c65e</string>
1454+
<string>01d08f13c7bc8d1b95b0330fa6833b7d8274e4d0</string>
14551455
<key>hash_algorithm</key>
14561456
<string>sha1</string>
14571457
<key>url</key>
1458-
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/178910561</string>
1458+
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/196289775</string>
14591459
</map>
14601460
<key>name</key>
14611461
<string>linux64</string>
@@ -1467,24 +1467,24 @@
14671467
<key>creds</key>
14681468
<string>github</string>
14691469
<key>hash</key>
1470-
<string>66824c02e0e5eabbfbe37bfb173360195f89697c</string>
1470+
<string>6d00345c7d3471bc5f7c1218e014dd0f1a2c069b</string>
14711471
<key>hash_algorithm</key>
14721472
<string>sha1</string>
14731473
<key>url</key>
1474-
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/178910562</string>
1474+
<string>https://api.github.com/repos/secondlife/llphysicsextensions_source/releases/assets/196289778</string>
14751475
</map>
14761476
<key>name</key>
14771477
<string>windows64</string>
14781478
</map>
14791479
</map>
1480+
<key>copyright</key>
1481+
<string>Copyright (c) 2010, Linden Research, Inc.</string>
14801482
<key>license</key>
14811483
<string>internal</string>
14821484
<key>license_file</key>
14831485
<string>LICENSES/llphysicsextensions.txt</string>
1484-
<key>copyright</key>
1485-
<string>Copyright (c) 2010, Linden Research, Inc.</string>
14861486
<key>version</key>
1487-
<string>1.0.66e6919</string>
1487+
<string>1.0.11137145495</string>
14881488
<key>name</key>
14891489
<string>llphysicsextensions_source</string>
14901490
</map>

indra/edit-me-to-trigger-new-build.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

indra/llcorehttp/_httpoprequest.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,7 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
538538
long sslHostV(0L);
539539
long dnsCacheTimeout(-1L);
540540
long nobody(0L);
541+
curl_off_t lastModified(0L);
541542

542543
if (mReqOptions)
543544
{
@@ -546,6 +547,7 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
546547
sslHostV = mReqOptions->getSSLVerifyHost() ? 2L : 0L;
547548
dnsCacheTimeout = mReqOptions->getDNSCacheTimeout();
548549
nobody = mReqOptions->getHeadersOnly() ? 1L : 0L;
550+
lastModified = (curl_off_t)mReqOptions->getLastModified();
549551
}
550552
check_curl_easy_setopt(mCurlHandle, CURLOPT_FOLLOWLOCATION, follow_redirect);
551553

@@ -554,6 +556,17 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
554556

555557
check_curl_easy_setopt(mCurlHandle, CURLOPT_NOBODY, nobody);
556558

559+
if (lastModified)
560+
{
561+
check_curl_easy_setopt(mCurlHandle, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
562+
#if (LIBCURL_VERSION_NUM >= 0x073B00)
563+
// requires curl 7.59.0
564+
check_curl_easy_setopt(mCurlHandle, CURLOPT_TIMEVALUE_LARGE, lastModified);
565+
#else
566+
check_curl_easy_setopt(mCurlHandle, CURLOPT_TIMEVALUE, (long)lastModified);
567+
#endif
568+
}
569+
557570
// The Linksys WRT54G V5 router has an issue with frequent
558571
// DNS lookups from LAN machines. If they happen too often,
559572
// like for every HTTP request, the router gets annoyed after

indra/llcorehttp/httpoptions.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ HttpOptions::HttpOptions() :
4747
mVerifyPeer(sDefaultVerifyPeer),
4848
mVerifyHost(false),
4949
mDNSCacheTimeout(-1L),
50+
mLastModified(0),
5051
mNoBody(false)
5152
{}
5253

@@ -129,6 +130,11 @@ void HttpOptions::setHeadersOnly(bool nobody)
129130
}
130131
}
131132

133+
void HttpOptions::setLastModified(time_t lastModified)
134+
{
135+
mLastModified = lastModified;
136+
}
137+
132138
void HttpOptions::setDefaultSSLVerifyPeer(bool verify)
133139
{
134140
sDefaultVerifyPeer = verify;

indra/llcorehttp/httpoptions.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,13 @@ class HttpOptions : private boost::noncopyable
178178
return mNoBody;
179179
}
180180

181+
// Default: 0
182+
void setLastModified(time_t lastModified);
183+
time_t getLastModified() const
184+
{
185+
return mLastModified;
186+
}
187+
181188
/// Sets default behavior for verifying that the name in the
182189
/// security certificate matches the name of the host contacted.
183190
/// Defaults false if not set, but should be set according to
@@ -199,6 +206,7 @@ class HttpOptions : private boost::noncopyable
199206
bool mVerifyHost;
200207
int mDNSCacheTimeout;
201208
bool mNoBody;
209+
time_t mLastModified;
202210

203211
static bool sDefaultVerifyPeer;
204212
}; // end class HttpOptions

indra/llmessage/llcoproceduremanager.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,15 @@ static const U32 DEFAULT_POOL_SIZE = 5;
5050
// SL-14399: When we teleport to a brand-new simulator, the coprocedure queue
5151
// gets absolutely slammed with fetch requests. Make this queue effectively
5252
// unlimited.
53-
const U32 LLCoprocedureManager::DEFAULT_QUEUE_SIZE = 1024*1024;
53+
const U32 LLCoprocedureManager::DEFAULT_QUEUE_SIZE = 1024*512;
5454

5555
//=========================================================================
5656
class LLCoprocedurePool: private boost::noncopyable
5757
{
5858
public:
5959
typedef LLCoprocedureManager::CoProcedure_t CoProcedure_t;
6060

61-
LLCoprocedurePool(const std::string &name, size_t size);
61+
LLCoprocedurePool(const std::string &name, size_t size, size_t queue_size);
6262
~LLCoprocedurePool();
6363

6464
/// Places the coprocedure on the queue for processing.
@@ -118,7 +118,7 @@ class LLCoprocedurePool: private boost::noncopyable
118118
typedef std::shared_ptr<CoprocQueue_t> CoprocQueuePtr;
119119

120120
std::string mPoolName;
121-
size_t mPoolSize, mActiveCoprocsCount, mPending;
121+
size_t mPoolSize, mQueueSize, mActiveCoprocsCount, mPending;
122122
CoprocQueuePtr mPendingCoprocs;
123123
LLTempBoundListener mStatusListener;
124124

@@ -141,7 +141,7 @@ LLCoprocedureManager::~LLCoprocedureManager()
141141
close();
142142
}
143143

144-
void LLCoprocedureManager::initializePool(const std::string &poolName)
144+
void LLCoprocedureManager::initializePool(const std::string &poolName, size_t queue_size)
145145
{
146146
poolMap_t::iterator it = mPoolMap.find(poolName);
147147

@@ -180,7 +180,7 @@ void LLCoprocedureManager::initializePool(const std::string &poolName)
180180
LL_WARNS("CoProcMgr") << "LLCoprocedureManager: No setting for \"" << keyName << "\" setting pool size to default of " << size << LL_ENDL;
181181
}
182182

183-
poolPtr_t pool(new LLCoprocedurePool(poolName, size));
183+
poolPtr_t pool(new LLCoprocedurePool(poolName, size, queue_size));
184184
LL_ERRS_IF(!pool, "CoprocedureManager") << "Unable to create pool named \"" << poolName << "\" FATAL!" << LL_ENDL;
185185

186186
bool inserted = mPoolMap.emplace(poolName, pool).second;
@@ -212,7 +212,8 @@ void LLCoprocedureManager::setPropertyMethods(SettingQuery_t queryfn, SettingUpd
212212
mPropertyQueryFn = queryfn;
213213
mPropertyDefineFn = updatefn;
214214

215-
initializePool("Upload");
215+
constexpr size_t UPLOAD_QUEUE_SIZE = 2048;
216+
initializePool("Upload", UPLOAD_QUEUE_SIZE);
216217
initializePool("AIS"); // it might be better to have some kind of on-demand initialization for AIS
217218
// "ExpCache" pool gets initialized in LLExperienceCache
218219
// asset storage pool gets initialized in LLViewerAssetStorage
@@ -296,17 +297,19 @@ void LLCoprocedureManager::close(const std::string &pool)
296297
}
297298

298299
//=========================================================================
299-
LLCoprocedurePool::LLCoprocedurePool(const std::string &poolName, size_t size):
300+
LLCoprocedurePool::LLCoprocedurePool(const std::string &poolName, size_t size, size_t queue_size):
300301
mPoolName(poolName),
301302
mPoolSize(size),
303+
mQueueSize(queue_size),
302304
mActiveCoprocsCount(0),
303305
mPending(0),
304306
mHTTPPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID),
305307
mCoroMapping()
306308
{
309+
llassert_always(mQueueSize > mPoolSize); // queue should be able to fit pool
307310
try
308311
{
309-
mPendingCoprocs = std::make_shared<CoprocQueue_t>(LLCoprocedureManager::DEFAULT_QUEUE_SIZE);
312+
mPendingCoprocs = std::make_shared<CoprocQueue_t>(mQueueSize);
310313
// store in our LLTempBoundListener so that when the LLCoprocedurePool is
311314
// destroyed, we implicitly disconnect from this LLEventPump
312315
// Monitores application status
@@ -357,7 +360,7 @@ LLCoprocedurePool::LLCoprocedurePool(const std::string &poolName, size_t size):
357360
mCoroMapping.insert(CoroAdapterMap_t::value_type(pooledCoro, httpAdapter));
358361
}
359362

360-
LL_INFOS("CoProcMgr") << "Created coprocedure pool named \"" << mPoolName << "\" with " << size << " items, queue max " << LLCoprocedureManager::DEFAULT_QUEUE_SIZE << LL_ENDL;
363+
LL_INFOS("CoProcMgr") << "Created coprocedure pool named \"" << mPoolName << "\" with " << size << " items, queue max " << mQueueSize << LL_ENDL;
361364
}
362365

363366
LLCoprocedurePool::~LLCoprocedurePool()
@@ -376,7 +379,7 @@ LLUUID LLCoprocedurePool::enqueueCoprocedure(const std::string &name, LLCoproced
376379
<< "\" at "
377380
<< mPending << LL_ENDL;
378381

379-
if (mPending >= (LLCoprocedureManager::DEFAULT_QUEUE_SIZE - 1))
382+
if (mPending >= (mQueueSize - 1))
380383
{
381384
// If it's all used up (not supposed to happen,
382385
// fetched should cap it), we are going to crash

indra/llmessage/llcoproceduremanager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class LLCoprocedureManager : public LLSingleton < LLCoprocedureManager >
7979
void close();
8080
void close(const std::string &pool);
8181

82-
void initializePool(const std::string &poolName);
82+
void initializePool(const std::string &poolName, size_t queue_size = DEFAULT_QUEUE_SIZE);
8383

8484
private:
8585

indra/llmessage/llexperiencecache.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ void LLExperienceCache::initSingleton()
110110
cache_stream >> (*this);
111111
}
112112

113-
LLCoprocedureManager::instance().initializePool("ExpCache");
113+
constexpr size_t CORO_QUEUE_SIZE = 2048;
114+
LLCoprocedureManager::instance().initializePool("ExpCache", CORO_QUEUE_SIZE);
114115

115116
LLCoros::instance().launch("LLExperienceCache::idleCoro",
116117
boost::bind(&LLExperienceCache::idleCoro, this));

0 commit comments

Comments
 (0)