Merged in lindenlab/viewer-bear
commit
46a34fe0ee
|
|
@ -1034,7 +1034,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
|
|||
val = (kdu_int32)(sp->fval*scale16);
|
||||
val = (val+128)>>8; // May be faster than true rounding
|
||||
val += 128;
|
||||
if (val & ((-1)<<8))
|
||||
if (val & ((0xffffffffU)<<8))
|
||||
{
|
||||
val = (val < 0 ? 0 : 255);
|
||||
}
|
||||
|
|
@ -1052,7 +1052,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
|
|||
val = sp->ival;
|
||||
val = (val+offset)>>downshift;
|
||||
val += 128;
|
||||
if (val & ((-1)<<8))
|
||||
if (val & ((0xffffffffU)<<8))
|
||||
{
|
||||
val = (val < 0 ? 0 : 255);
|
||||
}
|
||||
|
|
@ -1075,7 +1075,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
|
|||
val += (1<<(KDU_FIX_POINT-8))>>1;
|
||||
val >>= (KDU_FIX_POINT-8);
|
||||
val += 128;
|
||||
if (val & ((-1)<<8))
|
||||
if (val & ((0xffffffffU)<<8))
|
||||
{
|
||||
val = (val < 0 ? 0 : 255);
|
||||
}
|
||||
|
|
@ -1094,7 +1094,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
|
|||
val = (val+offset)>>downshift;
|
||||
val <<= upshift;
|
||||
val += 128;
|
||||
if (val & ((-1)<<8))
|
||||
if (val & ((0xffffffffU)<<8))
|
||||
{
|
||||
val = (val < 0 ? 0 : 256 - (1<<upshift));
|
||||
}
|
||||
|
|
@ -1116,7 +1116,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
|
|||
val = sp->ival;
|
||||
val = (val+offset)>>downshift;
|
||||
val += 128;
|
||||
if (val & ((-1)<<8))
|
||||
if (val & ((0xffffffffU)<<8))
|
||||
{
|
||||
val = (val < 0 ? 0 : 255);
|
||||
}
|
||||
|
|
@ -1132,7 +1132,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
|
|||
val = sp->ival;
|
||||
val <<= upshift;
|
||||
val += 128;
|
||||
if (val & ((-1)<<8))
|
||||
if (val & ((0xffffffffU)<<8))
|
||||
{
|
||||
val = (val < 0 ? 0 : 256 - (1<<upshift));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,8 @@
|
|||
static std::map<std::string, U32> DefaultPoolSizes =
|
||||
boost::assign::map_list_of
|
||||
(std::string("Upload"), 1)
|
||||
(std::string("AIS"), 25);
|
||||
(std::string("AIS"), 1);
|
||||
// *TODO: Rider for the moment keep AIS calls serialized otherwise the COF will tend to get out of sync.
|
||||
|
||||
#define DEFAULT_POOL_SIZE 5
|
||||
|
||||
|
|
|
|||
|
|
@ -14490,7 +14490,7 @@
|
|||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>25</integer>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>PoolSizeUpload</key>
|
||||
<map>
|
||||
|
|
|
|||
|
|
@ -65,7 +65,12 @@
|
|||
#pragma warning (disable:4702)
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
namespace
|
||||
{
|
||||
const S32 BAKE_RETRY_MAX_COUNT = 5;
|
||||
const F32 BAKE_RETRY_TIMEOUT = 2.0F;
|
||||
}
|
||||
|
||||
// *TODO$: LLInventoryCallback should be deprecated to conform to the new boost::bind/coroutine model.
|
||||
// temp code in transition
|
||||
void doAppearanceCb(LLPointer<LLInventoryCallback> cb, LLUUID id)
|
||||
|
|
@ -73,8 +78,6 @@ void doAppearanceCb(LLPointer<LLInventoryCallback> cb, LLUUID id)
|
|||
if (cb.notNull())
|
||||
cb->fire(id);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
std::string self_av_string()
|
||||
{
|
||||
|
|
@ -3354,12 +3357,36 @@ LLSD LLAppearanceMgr::dumpCOF() const
|
|||
|
||||
void LLAppearanceMgr::requestServerAppearanceUpdate()
|
||||
{
|
||||
LLCoprocedureManager::CoProcedure_t proc = boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this, _1);
|
||||
LLCoprocedureManager::instance().enqueueCoprocedure("AIS", "LLAppearanceMgr::serverAppearanceUpdateCoro", proc);
|
||||
if (!mOutstandingAppearanceBakeRequest)
|
||||
{
|
||||
#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
|
||||
mRerequestAppearanceBake = false;
|
||||
LLCoprocedureManager::CoProcedure_t proc = boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this, _1);
|
||||
LLCoprocedureManager::instance().enqueueCoprocedure("AIS", "LLAppearanceMgr::serverAppearanceUpdateCoro", proc);
|
||||
#else
|
||||
LLCoros::instance().launch("serverAppearanceUpdateCoro",
|
||||
boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this));
|
||||
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
mRerequestAppearanceBake = true;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
|
||||
void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter)
|
||||
#else
|
||||
void LLAppearanceMgr::serverAppearanceUpdateCoro()
|
||||
#endif
|
||||
{
|
||||
#ifndef APPEARANCEBAKE_AS_IN_AIS_QUEUE
|
||||
LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(
|
||||
new LLCoreHttpUtil::HttpCoroutineAdapter("serverAppearanceUpdateCoro", LLCore::HttpRequest::DEFAULT_POLICY_ID));
|
||||
#endif
|
||||
|
||||
mRerequestAppearanceBake = false;
|
||||
if (!gAgent.getRegion())
|
||||
{
|
||||
LL_WARNS("Avatar") << "Region not set, cannot request server appearance update" << LL_ENDL;
|
||||
|
|
@ -3386,57 +3413,57 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd
|
|||
return;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static int reqcount = 0;
|
||||
int r_count = ++reqcount;
|
||||
LL_WARNS("Avatar") << "START: Server Bake request #" << r_count << "!" << LL_ENDL;
|
||||
#endif
|
||||
|
||||
// If we have already received an update for this or higher cof version,
|
||||
// put a warning in the log but request anyway.
|
||||
S32 cofVersion = getCOFVersion();
|
||||
S32 lastRcv = gAgentAvatarp->mLastUpdateReceivedCOFVersion;
|
||||
S32 lastReq = gAgentAvatarp->mLastUpdateRequestCOFVersion;
|
||||
|
||||
LL_INFOS("Avatar") << "Requesting COF version " << cofVersion <<
|
||||
" (Last Received:" << lastRcv << ")" <<
|
||||
" (Last Requested:" << lastReq << ")" << LL_ENDL;
|
||||
|
||||
if ((cofVersion != LLViewerInventoryCategory::VERSION_UNKNOWN))
|
||||
{
|
||||
if (cofVersion < lastRcv)
|
||||
{
|
||||
LL_WARNS("Avatar") << "Have already received update for cof version " << lastRcv
|
||||
<< " but requesting for " << cofVersion << LL_ENDL;
|
||||
}
|
||||
if (lastReq > cofVersion)
|
||||
{
|
||||
LL_WARNS("Avatar") << "Request already in flight for cof version " << lastReq
|
||||
<< " but requesting for " << cofVersion << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
// Actually send the request.
|
||||
LL_DEBUGS("Avatar") << "Will send request for cof_version " << cofVersion << LL_ENDL;
|
||||
|
||||
// LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter(
|
||||
// "UpdateAvatarAppearance", gAgent.getAgentPolicy()));
|
||||
|
||||
llcoro::suspend();
|
||||
S32 retryCount(0);
|
||||
bool bRetry;
|
||||
do
|
||||
{
|
||||
BoolSetter outstanding(mOutstandingAppearanceBakeRequest);
|
||||
|
||||
// If we have already received an update for this or higher cof version,
|
||||
// put a warning in the log and cancel the request.
|
||||
S32 cofVersion = getCOFVersion();
|
||||
S32 lastRcv = gAgentAvatarp->mLastUpdateReceivedCOFVersion;
|
||||
S32 lastReq = gAgentAvatarp->mLastUpdateRequestCOFVersion;
|
||||
|
||||
LL_INFOS("Avatar") << "Requesting COF version " << cofVersion <<
|
||||
" (Last Received:" << lastRcv << ")" <<
|
||||
" (Last Requested:" << lastReq << ")" << LL_ENDL;
|
||||
|
||||
if (cofVersion == LLViewerInventoryCategory::VERSION_UNKNOWN)
|
||||
{
|
||||
LL_WARNS("AVatar") << "COF version is unknown... not requesting until COF version is known." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cofVersion < lastRcv)
|
||||
{
|
||||
LL_WARNS("Avatar") << "Have already received update for cof version " << lastRcv
|
||||
<< " but requesting for " << cofVersion << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
if (lastReq > cofVersion)
|
||||
{
|
||||
LL_WARNS("Avatar") << "Request already in flight for cof version " << lastReq
|
||||
<< " but requesting for " << cofVersion << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Actually send the request.
|
||||
LL_DEBUGS("Avatar") << "Will send request for cof_version " << cofVersion << LL_ENDL;
|
||||
|
||||
bRetry = false;
|
||||
LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest());
|
||||
|
||||
S32 reqCofVersion = getCOFVersion(); // Treat COF version (gets set by AISAPI as authoritative,
|
||||
// not what the bake request tells us to use).
|
||||
if (gSavedSettings.getBOOL("DebugForceAppearanceRequestFailure"))
|
||||
{
|
||||
reqCofVersion += 999;
|
||||
cofVersion += 999;
|
||||
LL_WARNS("Avatar") << "Forcing version failure on COF Baking" << LL_ENDL;
|
||||
}
|
||||
|
||||
LL_INFOS() << "Requesting bake for COF version " << reqCofVersion << LL_ENDL;
|
||||
LL_INFOS() << "Requesting bake for COF version " << cofVersion << LL_ENDL;
|
||||
|
||||
LLSD postData;
|
||||
if (gSavedSettings.getBOOL("DebugAvatarExperimentalServerAppearanceUpdate"))
|
||||
|
|
@ -3445,10 +3472,10 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd
|
|||
}
|
||||
else
|
||||
{
|
||||
postData["cof_version"] = reqCofVersion;
|
||||
postData["cof_version"] = cofVersion;
|
||||
}
|
||||
|
||||
gAgentAvatarp->mLastUpdateRequestCOFVersion = reqCofVersion;
|
||||
gAgentAvatarp->mLastUpdateRequestCOFVersion = cofVersion;
|
||||
|
||||
LLSD result = httpAdapter->postAndSuspend(httpRequest, url, postData);
|
||||
|
||||
|
|
@ -3466,14 +3493,30 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd
|
|||
// on multiple machines.
|
||||
if (result.has("expected"))
|
||||
{
|
||||
|
||||
S32 expectedCofVersion = result["expected"].asInteger();
|
||||
LL_WARNS("Avatar") << "Server expected " << expectedCofVersion << " as COF version" << LL_ENDL;
|
||||
|
||||
bRetry = true;
|
||||
// Wait for a 1/2 second before trying again. Just to keep from asking too quickly.
|
||||
llcoro::suspendUntilTimeout(0.5);
|
||||
if (++retryCount > BAKE_RETRY_MAX_COUNT)
|
||||
{
|
||||
LL_WARNS("Avatar") << "Bake retry count exceeded!" << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
F32 timeout = pow(BAKE_RETRY_TIMEOUT, static_cast<float>(retryCount)) - 1.0;
|
||||
|
||||
LL_WARNS("Avatar") << "Server expected " << expectedCofVersion << " as COF version" << LL_ENDL;
|
||||
LL_WARNS("Avatar") << "Bake retry #" << retryCount << " in " << timeout << " seconds." << LL_ENDL;
|
||||
|
||||
llcoro::suspendUntilTimeout(timeout);
|
||||
bRetry = true;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("Avatar") << "No retry attempted." << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
LL_DEBUGS("Avatar") << "succeeded" << LL_ENDL;
|
||||
|
|
@ -3484,10 +3527,11 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd
|
|||
|
||||
} while (bRetry);
|
||||
|
||||
#if 0
|
||||
LL_WARNS("Avatar") << "END: Server Bake request #" << r_count << "!" << LL_ENDL;
|
||||
#endif
|
||||
|
||||
if (mRerequestAppearanceBake)
|
||||
{ // A bake request came in while this one was still outstanding.
|
||||
// Requeue ourself for a later request.
|
||||
requestServerAppearanceUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
/*static*/
|
||||
|
|
@ -3855,7 +3899,9 @@ LLAppearanceMgr::LLAppearanceMgr():
|
|||
mOutfitLocked(false),
|
||||
mInFlightCounter(0),
|
||||
mInFlightTimer(),
|
||||
mIsInUpdateAppearanceFromCOF(false)
|
||||
mIsInUpdateAppearanceFromCOF(false),
|
||||
mOutstandingAppearanceBakeRequest(false),
|
||||
mRerequestAppearanceBake(false)
|
||||
{
|
||||
LLOutfitObserver& outfit_observer = LLOutfitObserver::instance();
|
||||
// unlock outfit on save operation completed
|
||||
|
|
|
|||
|
|
@ -228,7 +228,12 @@ public:
|
|||
|
||||
|
||||
private:
|
||||
#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
|
||||
void serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter);
|
||||
#else
|
||||
void serverAppearanceUpdateCoro();
|
||||
#endif
|
||||
|
||||
static void debugAppearanceUpdateCOF(const LLSD& content);
|
||||
|
||||
std::string mAppearanceServiceURL;
|
||||
|
|
@ -255,6 +260,8 @@ private:
|
|||
bool mAttachmentInvLinkEnabled;
|
||||
bool mOutfitIsDirty;
|
||||
bool mIsInUpdateAppearanceFromCOF; // to detect recursive calls.
|
||||
bool mOutstandingAppearanceBakeRequest; // A bake request is outstanding. Do not overlap.
|
||||
bool mRerequestAppearanceBake;
|
||||
|
||||
/**
|
||||
* Lock for blocking operations on outfit until server reply or timeout exceed
|
||||
|
|
|
|||
|
|
@ -1312,6 +1312,13 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)
|
|||
if (parseRawCookie(sOpenIDCookie, cookie_name, cookie_value, cookie_path, httponly, secure) &&
|
||||
media_instance->getMediaPlugin())
|
||||
{
|
||||
// MAINT-5711 - inexplicably, the CEF setCookie function will no longer set the cookie if the
|
||||
// url and domain are not the same. This used to be my.sl.com and id.sl.com respectively and worked.
|
||||
// For now, we use the URL for the OpenID POST request since it will have the same authority
|
||||
// as the domain field.
|
||||
// (Feels like there must be a less dirty way to construct a URL from component LLURL parts)
|
||||
url = std::string(sOpenIDURL.mURI) + "://" + std::string(sOpenIDURL.mAuthority);
|
||||
|
||||
media_instance->getMediaPlugin()->setCookie(url, cookie_name, cookie_value, cookie_host, cookie_path, httponly, secure);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue