From 910a1d704e35d5789e4a8c34efa89ed8d7f3bf9d Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 6 Nov 2018 17:11:22 +0200 Subject: SL-10001 Fixed position parameters trembling at the top of the page when moving --- indra/newview/llmanip.cpp | 71 ++++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp index 8567180dd6..1dc03123eb 100644 --- a/indra/newview/llmanip.cpp +++ b/indra/newview/llmanip.cpp @@ -431,7 +431,6 @@ void LLManip::renderXYZ(const LLVector3 &vec) { const S32 PAD = 10; std::string feedback_string; - LLVector3 camera_pos = LLViewerCamera::getInstance()->getOrigin() + LLViewerCamera::getInstance()->getAtAxis(); S32 window_center_x = gViewerWindow->getWorldViewRectScaled().getWidth() / 2; S32 window_center_y = gViewerWindow->getWorldViewRectScaled().getHeight() / 2; S32 vertical_offset = window_center_y - VERTICAL_OFFSET; @@ -451,37 +450,47 @@ void LLManip::renderXYZ(const LLVector3 &vec) 235, PAD * 2 + 10, LLColor4(0.f, 0.f, 0.f, 0.7f) ); - } - gGL.popMatrix(); - - gViewerWindow->setup3DRender(); - { - LLFontGL* font = LLFontGL::getFontSansSerif(); - LLLocale locale(LLLocale::USER_LOCALE); - LLGLDepthTest gls_depth(GL_FALSE); - // render drop shadowed text - feedback_string = llformat("X: %.3f", vec.mV[VX]); - hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *font, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -102.f + 1.f, (F32)vertical_offset - 1.f, LLColor4::black, FALSE); - - feedback_string = llformat("Y: %.3f", vec.mV[VY]); - hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *font, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -27.f + 1.f, (F32)vertical_offset - 1.f, LLColor4::black, FALSE); - - feedback_string = llformat("Z: %.3f", vec.mV[VZ]); - hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *font, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, 48.f + 1.f, (F32)vertical_offset - 1.f, LLColor4::black, FALSE); - - // render text on top - feedback_string = llformat("X: %.3f", vec.mV[VX]); - hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *font, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -102.f, (F32)vertical_offset, LLColor4(1.f, 0.5f, 0.5f, 1.f), FALSE); - - gGL.diffuseColor3f(0.5f, 1.f, 0.5f); - feedback_string = llformat("Y: %.3f", vec.mV[VY]); - hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *font, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -27.f, (F32)vertical_offset, LLColor4(0.5f, 1.f, 0.5f, 1.f), FALSE); - - gGL.diffuseColor3f(0.5f, 0.5f, 1.f); - feedback_string = llformat("Z: %.3f", vec.mV[VZ]); - hud_render_text(utf8str_to_wstring(feedback_string), camera_pos, *font, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, 48.f, (F32)vertical_offset, LLColor4(0.5f, 0.5f, 1.f, 1.f), FALSE); - } + LLFontGL* font = LLFontGL::getFontSansSerif(); + LLLocale locale(LLLocale::USER_LOCALE); + LLGLDepthTest gls_depth(GL_FALSE); + + // render drop shadowed text (manually because of bigger 'distance') + F32 right_x; + feedback_string = llformat("X: %.3f", vec.mV[VX]); + font->render(utf8str_to_wstring(feedback_string), 0, window_center_x - 102.f + 1.f, window_center_y + vertical_offset - 2.f, LLColor4::black, + LLFontGL::LEFT, LLFontGL::BASELINE, + LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, 1000, &right_x); + + feedback_string = llformat("Y: %.3f", vec.mV[VY]); + font->render(utf8str_to_wstring(feedback_string), 0, window_center_x - 27.f + 1.f, window_center_y + vertical_offset - 2.f, LLColor4::black, + LLFontGL::LEFT, LLFontGL::BASELINE, + LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, 1000, &right_x); + + feedback_string = llformat("Z: %.3f", vec.mV[VZ]); + font->render(utf8str_to_wstring(feedback_string), 0, window_center_x + 48.f + 1.f, window_center_y + vertical_offset - 2.f, LLColor4::black, + LLFontGL::LEFT, LLFontGL::BASELINE, + LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, 1000, &right_x); + + // render text on top + feedback_string = llformat("X: %.3f", vec.mV[VX]); + font->render(utf8str_to_wstring(feedback_string), 0, window_center_x - 102.f, window_center_y + vertical_offset, LLColor4(1.f, 0.5f, 0.5f, 1.f), + LLFontGL::LEFT, LLFontGL::BASELINE, + LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, 1000, &right_x); + + feedback_string = llformat("Y: %.3f", vec.mV[VY]); + font->render(utf8str_to_wstring(feedback_string), 0, window_center_x - 27.f, window_center_y + vertical_offset, LLColor4(0.5f, 1.f, 0.5f, 1.f), + LLFontGL::LEFT, LLFontGL::BASELINE, + LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, 1000, &right_x); + + feedback_string = llformat("Z: %.3f", vec.mV[VZ]); + font->render(utf8str_to_wstring(feedback_string), 0, window_center_x + 48.f, window_center_y + vertical_offset, LLColor4(0.5f, 0.5f, 1.f, 1.f), + LLFontGL::LEFT, LLFontGL::BASELINE, + LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, 1000, &right_x); + } + gGL.popMatrix(); + + gViewerWindow->setup3DRender(); } void LLManip::renderTickText(const LLVector3& pos, const std::string& text, const LLColor4 &color) -- cgit v1.2.3 From 88956491c819525fa07c1d347056f6a6900b4881 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Wed, 7 Nov 2018 18:21:16 +0200 Subject: SL-9414 Inconsistent hover vs click action when viewed through transparent prims --- indra/newview/lltoolpie.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 5082e16685..d8f63b9332 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -112,8 +112,22 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask) mMouseDownX = x; mMouseDownY = y; - //left mouse down always picks transparent (but see handleMouseUp) - mPick = gViewerWindow->pickImmediate(x, y, TRUE, FALSE); + + mPick = gViewerWindow->pickImmediate(x, y, FALSE, FALSE); + LLViewerObject *object = mPick.getObject(); + LLViewerObject *parent = object ? object->getRootEdit() : NULL; + if (!object + || object->isAttachment() + || object->getClickAction() == CLICK_ACTION_DISABLED + || (!useClickAction(mask, object, parent) && !object->flagHandleTouch() && !(parent && parent->flagHandleTouch()))) + { + // Unless we are hovering over actionable visible object + // left mouse down always picks transparent (but see handleMouseUp). + // Also see LLToolPie::handleHover() - priorities are a bit different there. + // Todo: we need a more consistent set of rules to work with + mPick = gViewerWindow->pickImmediate(x, y, TRUE /*transparent*/, FALSE); + } + mPick.mKeyMask = mask; mMouseButtonDown = true; -- cgit v1.2.3 From 592d455cef5ea8be31aef66195c2fc64fc7bbb1f Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Fri, 9 Nov 2018 16:44:06 +0200 Subject: SL-10018 FIXED Viewer crashes when clicking on a link of a folder in Inventory --- indra/newview/llinventorypanel.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 45dbb446eb..3992b506e9 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1163,6 +1163,11 @@ void LLInventoryPanel::onSelectionChange(const std::deque& it LLFolderViewModelItemInventory* fve_listener = static_cast(folder_item->getViewModelItem()); if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY)) { + if (fve_listener->getInventoryObject() && fve_listener->getInventoryObject()->getIsLinkType()) + { + return; + } + if(prev_folder_item) { LLFolderBridge* prev_bridge = (LLFolderBridge*)prev_folder_item->getViewModelItem(); -- cgit v1.2.3 From 2d222309500a667cd8880172daa8f3d2088596b6 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Mon, 12 Nov 2018 15:31:19 +0200 Subject: SL-9935 Include full win10 build number in Help > About Second Life and logs --- indra/llcommon/llsys.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index 1ef6c538ba..1f8d558fbe 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -268,10 +268,32 @@ LLOSInfo::LLOSInfo() : } } + S32 ubr = 0; // Windows 10 Update Build Revision, can be retrieved from a registry + if (mMajorVer == 10) + { + DWORD cbData(sizeof(DWORD)); + DWORD data(0); + HKEY key; + BOOL ret_code = RegOpenKeyExW(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"), 0, KEY_READ, &key); + if (ERROR_SUCCESS == ret_code) + { + ret_code = RegQueryValueExW(key, L"UBR", 0, NULL, reinterpret_cast(&data), &cbData); + if (ERROR_SUCCESS == ret_code) + { + ubr = data; + } + } + } + mOSString = mOSStringSimple; if (mBuild > 0) { - mOSString += llformat("(Build %d)", mBuild); + mOSString += llformat("(Build %d", mBuild); + if (ubr > 0) + { + mOSString += llformat(".%d", ubr); + } + mOSString += ")"; } LLStringUtil::trim(mOSStringSimple); -- cgit v1.2.3 From 5356e8b81a4c79bd9725ba4e6409b1b76083f463 Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Mon, 12 Nov 2018 17:24:03 +0200 Subject: SL-10043 FIXED Viewer crashes when double-clicking 'For sale' parcel icon on World map in some cases --- indra/newview/llworldmapview.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 707fe76cef..b88631a71b 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -1751,9 +1751,12 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask ) case MAP_ITEM_LAND_FOR_SALE_ADULT: { LLVector3d pos_global = viewPosToGlobal(x, y); - LLSimInfo* info = LLWorldMap::getInstance()->simInfoFromPosGlobal(pos_global); - LLFloaterReg::hideInstance("world_map"); - LLFloaterReg::showInstance("search", LLSD().with("category", "land").with("query", info->getName())); + std::string sim_name; + if (LLWorldMap::getInstance()->simNameFromPosGlobal(pos_global, sim_name)) + { + LLFloaterReg::hideInstance("world_map"); + LLFloaterReg::showInstance("search", LLSD().with("category", "land").with("query", sim_name)); + } break; } case MAP_ITEM_CLASSIFIED: -- cgit v1.2.3 From 31be136d4056e02cbf5c377f3544235debb7376b Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 13 Nov 2018 20:00:47 +0200 Subject: SL-10042 Fixed hang in inventory floater --- indra/newview/llfloateravatarpicker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp index c5561fe011..33099db1b9 100644 --- a/indra/newview/llfloateravatarpicker.cpp +++ b/indra/newview/llfloateravatarpicker.cpp @@ -812,7 +812,7 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled() { bool ret_val = visibleItemsSelected(); - if ( ret_val ) + if ( ret_val && !isMinimized()) { std::string acvtive_panel_name; LLScrollListCtrl* list = NULL; -- cgit v1.2.3 From e867e619dbb62b4c9ebc1d358c6fea048f87190c Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Thu, 15 Nov 2018 00:27:26 +0200 Subject: build fix --- indra/newview/lltoolpie.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 5cfb2026e0..1b76d249cb 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -111,7 +111,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask) mMouseOutsideSlop = FALSE; mMouseDownX = x; mMouseDownY = y; - LLTimer pick_timer;. + LLTimer pick_timer; BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick"); mPick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged); LLViewerObject *object = mPick.getObject(); -- cgit v1.2.3 From ab0d3f09d7a356eae758de03d533fabb3a380da1 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Wed, 14 Nov 2018 17:15:11 +0200 Subject: SL-9975 All offline inventory offers from scripted objects are lost --- indra/newview/llimprocessing.cpp | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp index e76b3d118e..d59c301210 100644 --- a/indra/newview/llimprocessing.cpp +++ b/indra/newview/llimprocessing.cpp @@ -854,15 +854,33 @@ void LLIMProcessing::processNewMessage(LLUUID from_id, } else // IM_TASK_INVENTORY_OFFERED { - if (sizeof(S8) != binary_bucket_size) + if (offline == IM_OFFLINE && session_id.isNull() && aux_id.notNull() && binary_bucket_size > sizeof(S8)* 5) { - LL_WARNS("Messaging") << "Malformed inventory offer from object" << LL_ENDL; - delete info; - break; + // cap received offline message + std::string str_bucket = ll_safe_string((char*)binary_bucket, binary_bucket_size); + typedef boost::tokenizer > tokenizer; + boost::char_separator sep("|", "", boost::keep_empty_tokens); + tokenizer tokens(str_bucket, sep); + tokenizer::iterator iter = tokens.begin(); + + info->mType = (LLAssetType::EType)(atoi((*(iter++)).c_str())); + // Note There is more elements in 'tokens' ... + + info->mObjectID = LLUUID::null; + info->mFromObject = TRUE; + } + else + { + if (sizeof(S8) != binary_bucket_size) + { + LL_WARNS("Messaging") << "Malformed inventory offer from object" << LL_ENDL; + delete info; + break; + } + info->mType = (LLAssetType::EType) binary_bucket[0]; + info->mObjectID = LLUUID::null; + info->mFromObject = TRUE; } - info->mType = (LLAssetType::EType) binary_bucket[0]; - info->mObjectID = LLUUID::null; - info->mFromObject = TRUE; } info->mIM = dialog; -- cgit v1.2.3 From 6e934b1dba3928559e8eea619910cb61df3d2472 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Thu, 15 Nov 2018 15:14:00 +0200 Subject: SL-9782 Fixed The Stand button doesn't lay anymore on the lower bar --- indra/newview/llmoveview.cpp | 16 ---------------- indra/newview/llmoveview.h | 2 -- 2 files changed, 18 deletions(-) diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 301487b994..19f238d99a 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -702,11 +702,9 @@ void LLPanelStandStopFlying::updatePosition() { if (mAttached) return; - S32 y_pos = 0; S32 bottom_tb_center = 0; if (LLToolBar* toolbar_bottom = gToolBarView->getToolbar(LLToolBarEnums::TOOLBAR_BOTTOM)) { - y_pos = toolbar_bottom->getRect().getHeight(); bottom_tb_center = toolbar_bottom->getRect().getCenterX(); } @@ -716,20 +714,6 @@ void LLPanelStandStopFlying::updatePosition() left_tb_width = toolbar_left->getRect().getWidth(); } - if (!mStateManagementButtons.get()) // Obsolete?!! - { - LLPanel* panel_ssf_container = gToolBarView->getChild("state_management_buttons_container"); - if (panel_ssf_container) - { - mStateManagementButtons = panel_ssf_container->getHandle(); - } - } - - if(LLPanel* panel_ssf_container = mStateManagementButtons.get()) - { - panel_ssf_container->setOrigin(0, y_pos); - } - if (gToolBarView != NULL && gToolBarView->getToolbar(LLToolBarEnums::TOOLBAR_LEFT)->hasButtons()) { S32 x_pos = bottom_tb_center - getRect().getWidth() / 2 - left_tb_width; diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h index 4a31f2a814..e8b9a6fdb2 100644 --- a/indra/newview/llmoveview.h +++ b/indra/newview/llmoveview.h @@ -172,8 +172,6 @@ private: */ LLHandle mOriginalParent; - LLHandle mStateManagementButtons; - /** * True if the panel is currently attached to the movement controls floater. * -- cgit v1.2.3 From cd3608e661c3e2cab0fab25e11647ae8ee8285bd Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Fri, 16 Nov 2018 15:53:52 +0200 Subject: SL-10023 FIXED Dragging mouse on World map sometimes causes cursor jump to the center of the screen --- indra/llwindow/llopenglview-objc.mm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm index c8c086d705..8923ea6458 100644 --- a/indra/llwindow/llopenglview-objc.mm +++ b/indra/llwindow/llopenglview-objc.mm @@ -322,6 +322,10 @@ attributedStringInfo getSegments(NSAttributedString *str) - (void) mouseDown:(NSEvent *)theEvent { + NSPoint mPoint = [theEvent locationInWindow]; + mMousePos[0] = mPoint.x; + mMousePos[1] = mPoint.y; + // Apparently people still use this? if ([theEvent modifierFlags] & NSCommandKeyMask && !([theEvent modifierFlags] & NSControlKeyMask) && -- cgit v1.2.3 From e0072664237b6ac0cae45577b436e5a25800e2f1 Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Mon, 19 Nov 2018 17:24:06 +0200 Subject: SL-5366 FIXED Chinese characters are not displaying correctly in TOS loading text --- indra/newview/skins/default/xui/zh/floater_tos.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/zh/floater_tos.xml b/indra/newview/skins/default/xui/zh/floater_tos.xml index 4cac07cd21..2f02316fc0 100644 --- a/indra/newview/skins/default/xui/zh/floater_tos.xml +++ b/indra/newview/skins/default/xui/zh/floater_tos.xml @@ -4,7 +4,7 @@ http://secondlife.com/app/tos/ - data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody text=%22000000%22%3E%3Ch2%3E 正在載入 %3Ca%20target%3D%22_external%22%20href%3D%22http%3A//secondlife.com/app/tos/%22%3ETerms%20of%20Service%3C/a%3E...%3C/h2%3E %3C/body%3E %3C/html%3E + data:text/html;charset=utf-8,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody text=%22000000%22%3E%3Ch2%3E 正在載入 %3Ca%20target%3D%22_external%22%20href%3D%22http%3A//secondlife.com/app/tos/%22%3ETerms%20of%20Service%3C/a%3E...%3C/h2%3E %3C/body%3E %3C/html%3E 請閱讀並遵守Second Life使用條款、隱私政策、服務條款,包括同意在發生爭議時接受仲裁並放棄採取集體或群體求訴的規定。 繼續登入[SECOND_LIFE]前,你必須同意這些條款。 -- cgit v1.2.3 From a72a4cb394fcce65b10126d631b270acf6009eb4 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Fri, 16 Nov 2018 17:42:31 +0200 Subject: SL-4730 Reduce bias trashing --- indra/newview/llviewertexture.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index d5aa249883..d2157f33cf 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -474,6 +474,7 @@ void LLViewerTexture::initClass() // tuning params const F32 discard_bias_delta = .25f; const F32 discard_delta_time = 0.5f; +const F32 GPU_MEMORY_CHECK_WAIT_TIME = 1.0f; // non-const (used externally F32 texmem_lower_bound_scale = 0.85f; F32 texmem_middle_bound_scale = 0.925f; @@ -483,12 +484,12 @@ static LLTrace::BlockTimerStatHandle FTM_TEXTURE_MEMORY_CHECK("Memory Check"); //static bool LLViewerTexture::isMemoryForTextureLow() { - const F32 WAIT_TIME = 1.0f; //second static LLFrameTimer timer; + static bool low_mem = false; - if(timer.getElapsedTimeF32() < WAIT_TIME) //call this once per second. + if(timer.getElapsedTimeF32() < GPU_MEMORY_CHECK_WAIT_TIME) //call this once per second. { - return false; + return low_mem; } timer.reset(); @@ -497,7 +498,7 @@ bool LLViewerTexture::isMemoryForTextureLow() const S32Megabytes MIN_FREE_TEXTURE_MEMORY(20); //MB Changed to 20 MB per MAINT-6882 const S32Megabytes MIN_FREE_MAIN_MEMORY(100); //MB - bool low_mem = false; + low_mem = false; if (gGLManager.mHasATIMemInfo) { S32 meminfo[4]; @@ -572,10 +573,14 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity sEvaluationTimer.reset(); } } - else if(sEvaluationTimer.getElapsedTimeF32() > discard_delta_time && isMemoryForTextureLow()) + else if(isMemoryForTextureLow()) { - sDesiredDiscardBias += discard_bias_delta; - sEvaluationTimer.reset(); + // Note: isMemoryForTextureLow() uses 1s delay, make sure we waited enough for it to restore + if (sEvaluationTimer.getElapsedTimeF32() > GPU_MEMORY_CHECK_WAIT_TIME) + { + sDesiredDiscardBias += discard_bias_delta; + sEvaluationTimer.reset(); + } } else if (sDesiredDiscardBias > 0.0f && sBoundTextureMemory < sMaxBoundTextureMemory * texmem_lower_bound_scale && -- cgit v1.2.3 From ca9d39c6c7f0acd2cf6f8a6e894d09dcf8e6a353 Mon Sep 17 00:00:00 2001 From: Cinder Date: Thu, 25 Aug 2016 13:42:37 -0500 Subject: SL-3404 Don't send ParcelPropertiesRequest on every cursor position change --- doc/contributions.txt | 1 + indra/newview/lltoolpie.cpp | 10 ++++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index a09b6aff43..88b2a77393 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -371,6 +371,7 @@ Cinder Roxley STORM-2116 STORM-2127 STORM-2144 + SL-3404 Clara Young Coaldust Numbers VWR-1095 diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 1b76d249cb..697db01d11 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -870,13 +870,11 @@ static bool needs_tooltip(LLSelectNode* nodep) BOOL LLToolPie::handleTooltipLand(std::string line, std::string tooltip_msg) { - LLViewerParcelMgr::getInstance()->setHoverParcel( mHoverPick.mPosGlobal ); - // - // Do not show hover for land unless prefs are set to allow it. - // - + // Do not show hover for land unless prefs are set to allow it. if (!gSavedSettings.getBOOL("ShowLandHoverTip")) return TRUE; - + + LLViewerParcelMgr::getInstance()->setHoverParcel( mHoverPick.mPosGlobal ); + // Didn't hit an object, but since we have a land point we // must be hovering over land. -- cgit v1.2.3 From 33ef63f3ed03bf5444bc642c3f2d4c0c623d1295 Mon Sep 17 00:00:00 2001 From: Anchor Date: Thu, 27 Jul 2017 10:03:20 -0800 Subject: 1024*1024 baking texture size. --- indra/llappearance/lltexlayer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/llappearance/lltexlayer.cpp b/indra/llappearance/lltexlayer.cpp index 2cf86bb4fe..cc7fc73e85 100644 --- a/indra/llappearance/lltexlayer.cpp +++ b/indra/llappearance/lltexlayer.cpp @@ -187,8 +187,8 @@ BOOL LLTexLayerSetBuffer::renderTexLayerSet() LLTexLayerSetInfo::LLTexLayerSetInfo() : mBodyRegion( "" ), - mWidth( 512 ), - mHeight( 512 ), + mWidth( 1024 ), + mHeight( 1024 ), mClearAlpha( TRUE ) { } -- cgit v1.2.3 From 8c7edbef183e284186da583c4c9b55fe2bc972d1 Mon Sep 17 00:00:00 2001 From: Anchor Date: Wed, 6 Sep 2017 03:24:58 -0700 Subject: 1024*1024 baking viewer updates --- indra/llappearance/llavatarappearancedefines.cpp | 4 ++-- indra/newview/character/avatar_lad.xml | 20 ++++++++++---------- indra/newview/lldynamictexture.cpp | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/indra/llappearance/llavatarappearancedefines.cpp b/indra/llappearance/llavatarappearancedefines.cpp index f1c78946a1..17da19a710 100644 --- a/indra/llappearance/llavatarappearancedefines.cpp +++ b/indra/llappearance/llavatarappearancedefines.cpp @@ -27,8 +27,8 @@ #include "linden_common.h" #include "llavatarappearancedefines.h" -const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH = 512; -const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT = 512; +const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH = 1024; +const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT = 1024; const S32 LLAvatarAppearanceDefines::IMPOSTOR_PERIOD = 2; using namespace LLAvatarAppearanceDefines; diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index 90f06746c9..ee620b39b8 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -8923,8 +8923,8 @@ + width="1024" + height="1024"> + width="1024" + height="1024"> + width="1024" + height="1024"> Date: Wed, 13 Sep 2017 21:27:26 -0700 Subject: cleanup the commented out code --- indra/newview/lldynamictexture.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp index 800c36f911..87b56f33af 100644 --- a/indra/newview/lldynamictexture.cpp +++ b/indra/newview/lldynamictexture.cpp @@ -125,9 +125,9 @@ BOOL LLViewerDynamicTexture::render() //----------------------------------------------------------------------------- void LLViewerDynamicTexture::preRender(BOOL clear_depth) { - //only images up to 512x512 are supported - //llassert(mFullHeight <= 512); - //llassert(mFullWidth <= 512); + //only images up to 1024*1024 are supported + llassert(mFullHeight <= 1024); + llassert(mFullWidth <= 1024); if (gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete() && !gGLManager.mIsATI) { //using offscreen render target, just use the bottom left corner -- cgit v1.2.3 From bfbcd6d16931819c43eea8e83963c9f86c6892dd Mon Sep 17 00:00:00 2001 From: Anchor Linden Date: Wed, 28 Feb 2018 22:14:38 -0800 Subject: [MAINT-8081] - bakes on mesh. 1st pass. changed texture panel to select bakes on objects. handle magic bake ids in LLViewerObject. --- indra/llappearance/llavatarappearancedefines.cpp | 74 ++++++++++++ indra/llappearance/llavatarappearancedefines.h | 4 + indra/llappearance/lltexlayer.cpp | 4 +- indra/llcommon/indra_constants.cpp | 7 ++ indra/llcommon/indra_constants.h | 7 ++ indra/newview/character/avatar_lad.xml | 20 ++-- indra/newview/lldynamictexture.cpp | 4 +- indra/newview/lltexturectrl.cpp | 82 +++++++++++-- indra/newview/lltexturectrl.h | 3 + indra/newview/llviewerobject.cpp | 130 +++++++++++++++++++-- indra/newview/llviewerobject.h | 4 + indra/newview/llviewertexture.h | 5 + indra/newview/llviewertexturelist.cpp | 7 +- indra/newview/llvoavatar.cpp | 44 +++++++ indra/newview/llvoavatar.h | 1 + .../skins/default/xui/en/floater_texture_ctrl.xml | 72 +++++++++++- 16 files changed, 425 insertions(+), 43 deletions(-) diff --git a/indra/llappearance/llavatarappearancedefines.cpp b/indra/llappearance/llavatarappearancedefines.cpp index 17da19a710..9e95b6c154 100644 --- a/indra/llappearance/llavatarappearancedefines.cpp +++ b/indra/llappearance/llavatarappearancedefines.cpp @@ -26,6 +26,7 @@ #include "linden_common.h" #include "llavatarappearancedefines.h" +#include "indra_constants.h" const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH = 1024; const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT = 1024; @@ -266,3 +267,76 @@ LLWearableType::EType LLAvatarAppearanceDictionary::getTEWearableType(ETextureIn return getInstance()->getTexture(index)->mWearableType; } +// static +BOOL LLAvatarAppearanceDictionary::isBakedImageId(const LLUUID& id) +{ + if ((id == IMG_USE_BAKED_EYES) || (id == IMG_USE_BAKED_HAIR) || (id == IMG_USE_BAKED_HEAD) || (id == IMG_USE_BAKED_LOWER) || (id == IMG_USE_BAKED_SKIRT) || (id == IMG_USE_BAKED_UPPER)) + { + return TRUE; + } + + return FALSE; +} + +// static +EBakedTextureIndex LLAvatarAppearanceDictionary::assetIdToBakedTextureIndex(const LLUUID& id) +{ + if (id == IMG_USE_BAKED_EYES) + { + return BAKED_EYES; + } + else if (id == IMG_USE_BAKED_HAIR) + { + return BAKED_HAIR; + } + else if (id == IMG_USE_BAKED_HEAD) + { + return BAKED_HEAD; + } + else if (id == IMG_USE_BAKED_LOWER) + { + return BAKED_LOWER; + } + else if (id == IMG_USE_BAKED_SKIRT) + { + return BAKED_SKIRT; + } + else if (id == IMG_USE_BAKED_UPPER) + { + return BAKED_UPPER; + } + + return BAKED_NUM_INDICES; +} + +//static +LLUUID LLAvatarAppearanceDictionary::localTextureIndexToMagicId(ETextureIndex t) +{ + LLUUID id = LLUUID::null; + + switch (t) + { + case LLAvatarAppearanceDefines::TEX_HEAD_BAKED: + id = IMG_USE_BAKED_HEAD; + break; + case LLAvatarAppearanceDefines::TEX_UPPER_BAKED: + id = IMG_USE_BAKED_UPPER; + break; + case LLAvatarAppearanceDefines::TEX_LOWER_BAKED: + id = IMG_USE_BAKED_LOWER; + break; + case LLAvatarAppearanceDefines::TEX_EYES_BAKED: + id = IMG_USE_BAKED_EYES; + break; + case LLAvatarAppearanceDefines::TEX_SKIRT_BAKED: + id = IMG_USE_BAKED_SKIRT; + break; + case LLAvatarAppearanceDefines::TEX_HAIR_BAKED: + id = IMG_USE_BAKED_HAIR; + break; + default: + break; + } + + return id; +} diff --git a/indra/llappearance/llavatarappearancedefines.h b/indra/llappearance/llavatarappearancedefines.h index d6223bb4d2..af94ea94f2 100644 --- a/indra/llappearance/llavatarappearancedefines.h +++ b/indra/llappearance/llavatarappearancedefines.h @@ -223,6 +223,10 @@ public: // Given a texture entry, determine which wearable type owns it. static LLWearableType::EType getTEWearableType(ETextureIndex index); + static BOOL isBakedImageId(const LLUUID& id); + static EBakedTextureIndex assetIdToBakedTextureIndex(const LLUUID& id); + static LLUUID localTextureIndexToMagicId(ETextureIndex t); + }; // End LLAvatarAppearanceDictionary } // End namespace LLAvatarAppearanceDefines diff --git a/indra/llappearance/lltexlayer.cpp b/indra/llappearance/lltexlayer.cpp index cc7fc73e85..2cf86bb4fe 100644 --- a/indra/llappearance/lltexlayer.cpp +++ b/indra/llappearance/lltexlayer.cpp @@ -187,8 +187,8 @@ BOOL LLTexLayerSetBuffer::renderTexLayerSet() LLTexLayerSetInfo::LLTexLayerSetInfo() : mBodyRegion( "" ), - mWidth( 1024 ), - mHeight( 1024 ), + mWidth( 512 ), + mHeight( 512 ), mClearAlpha( TRUE ) { } diff --git a/indra/llcommon/indra_constants.cpp b/indra/llcommon/indra_constants.cpp index 7ea42a3fc0..1e85e1c605 100644 --- a/indra/llcommon/indra_constants.cpp +++ b/indra/llcommon/indra_constants.cpp @@ -72,3 +72,10 @@ const LLUUID TERRAIN_ROCK_DETAIL ("53a2f406-4895-1d13-d541-d2e3b86bc19c"); // V const LLUUID DEFAULT_WATER_NORMAL ("822ded49-9a6c-f61c-cb89-6df54f42cdf4"); // VIEWER +const LLUUID IMG_USE_BAKED_HEAD ("af238700-22df-5a1f-0818-f9877b30e027"); +const LLUUID IMG_USE_BAKED_UPPER ("b45fc8cc-7ab7-9bf7-bddb-d1053d89fc55"); +const LLUUID IMG_USE_BAKED_LOWER ("040973c3-5e2d-5f0e-6c7a-377bca151f82"); +const LLUUID IMG_USE_BAKED_EYES ("3769e766-88b6-df79-4c1e-46a588c5adb6"); +const LLUUID IMG_USE_BAKED_SKIRT ("96c3b3d8-9909-ab07-e858-626525a0a345"); +const LLUUID IMG_USE_BAKED_HAIR ("42f76a58-f1ab-7385-3f4f-da762d69192c"); + diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h index fda84aa5a8..28e55b2091 100644 --- a/indra/llcommon/indra_constants.h +++ b/indra/llcommon/indra_constants.h @@ -207,6 +207,13 @@ LL_COMMON_API extern const LLUUID TERRAIN_GRASS_DETAIL; LL_COMMON_API extern const LLUUID TERRAIN_MOUNTAIN_DETAIL; LL_COMMON_API extern const LLUUID TERRAIN_ROCK_DETAIL; +LL_COMMON_API extern const LLUUID IMG_USE_BAKED_HEAD; +LL_COMMON_API extern const LLUUID IMG_USE_BAKED_UPPER; +LL_COMMON_API extern const LLUUID IMG_USE_BAKED_LOWER; +LL_COMMON_API extern const LLUUID IMG_USE_BAKED_EYES; +LL_COMMON_API extern const LLUUID IMG_USE_BAKED_SKIRT; +LL_COMMON_API extern const LLUUID IMG_USE_BAKED_HAIR; + LL_COMMON_API extern const LLUUID DEFAULT_WATER_NORMAL; diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index ee620b39b8..90f06746c9 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -8923,8 +8923,8 @@ + width="512" + height="512"> + width="512" + height="512"> + width="512" + height="512"> setToolSelectCallback(boost::bind(&LLFloaterTexturePicker::onTextureSelect, this, _1)); + getChild("l_bake_use_texture_combo_box")->setCommitCallback(onBakeTextureSelect, this); + getChild("hide_base_mesh_region")->setCommitCallback(onHideBaseMeshRegionCheck, this); + + return TRUE; } @@ -760,22 +764,25 @@ void LLFloaterTexturePicker::onSelectionChange(const std::dequemModeSelector->getSelectedIndex() == 0); + int mode = self->mModeSelector->getSelectedIndex(); - self->getChild("Default")->setVisible(mode); - self->getChild("Blank")->setVisible(mode); - self->getChild("None")->setVisible(mode); - self->getChild("Pipette")->setVisible(mode); - self->getChild("inventory search editor")->setVisible(mode); - self->getChild("inventory panel")->setVisible(mode); + self->getChild("Default")->setVisible(mode == 0); + self->getChild("Blank")->setVisible(mode == 0); + self->getChild("None")->setVisible(mode == 0); + self->getChild("Pipette")->setVisible(mode == 0); + self->getChild("inventory search editor")->setVisible(mode == 0); + self->getChild("inventory panel")->setVisible(mode == 0); /*self->getChild("show_folders_check")->setVisible(mode); no idea under which conditions the above is even shown, needs testing. */ - self->getChild("l_add_btn")->setVisible(!mode); - self->getChild("l_rem_btn")->setVisible(!mode); - self->getChild("l_upl_btn")->setVisible(!mode); - self->getChild("l_name_list")->setVisible(!mode); + self->getChild("l_add_btn")->setVisible(mode == 1); + self->getChild("l_rem_btn")->setVisible(mode == 1); + self->getChild("l_upl_btn")->setVisible(mode == 1); + self->getChild("l_name_list")->setVisible(mode == 1); + + self->getChild("l_bake_use_texture_combo_box")->setVisible(mode == 2); + self->getChild("hide_base_mesh_region")->setVisible(false);// mode == 2); } // static @@ -896,6 +903,59 @@ void LLFloaterTexturePicker::onApplyImmediateCheck(LLUICtrl* ctrl, void *user_da picker->commitIfImmediateSet(); } +//static +void LLFloaterTexturePicker::onBakeTextureSelect(LLUICtrl* ctrl, void *user_data) +{ + LLFloaterTexturePicker* self = (LLFloaterTexturePicker*)user_data; + LLComboBox* combo_box = (LLComboBox*)ctrl; + + S8 type = combo_box->getValue().asInteger(); + + LLUUID imageID = LLUUID::null; + if (type == 0) + { + imageID = IMG_USE_BAKED_HEAD; + } + else if (type == 1) + { + imageID = IMG_USE_BAKED_UPPER; + } + else if (type == 2) + { + imageID = IMG_USE_BAKED_LOWER; + } + else if (type == 3) + { + imageID = IMG_USE_BAKED_EYES; + } + else if (type == 4) + { + imageID = IMG_USE_BAKED_SKIRT; + } + else if (type == 5) + { + imageID = IMG_USE_BAKED_HAIR; + } + + if (imageID.notNull()) + { + self->setCanApply(true, true); + self->setImageID(imageID); + self->commitIfImmediateSet(); + } + else + { + onBtnCancel(self); + } +} + +//static +void LLFloaterTexturePicker::onHideBaseMeshRegionCheck(LLUICtrl* ctrl, void *user_data) +{ + //LLFloaterTexturePicker* picker = (LLFloaterTexturePicker*)user_data; + //LLCheckBoxCtrl* check_box = (LLCheckBoxCtrl*)ctrl; +} + void LLFloaterTexturePicker::updateFilterPermMask() { //mInventoryPanel->setFilterPermMask( getFilterPermMask() ); Commented out due to no-copy texture loss. diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h index 840feddfaf..e70849e5c9 100644 --- a/indra/newview/lltexturectrl.h +++ b/indra/newview/lltexturectrl.h @@ -322,6 +322,9 @@ public: static void onBtnUpload(void* userdata); static void onLocalScrollCommit(LLUICtrl* ctrl, void* userdata); + static void onBakeTextureSelect(LLUICtrl* ctrl, void *userdata); + static void onHideBaseMeshRegionCheck(LLUICtrl* ctrl, void *userdata); + void setLocalTextureEnabled(BOOL enabled); protected: diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 5de4029542..1bc3b3c726 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -4358,31 +4358,119 @@ void LLViewerObject::sendTEUpdate() const // TODO send media type + + const U32 MAX_TES = 32; + + LLUUID texture_id[MAX_TES]; + S32 last_face_index = llmin((U32)getNumTEs(), MAX_TES) - 1; + + if (last_face_index > -1) + { + S8 face_index; + for (face_index = 0; face_index <= last_face_index; face_index++) + { + LLTextureEntry* entry = getTE((U8)face_index); + texture_id[face_index] = entry->getID(); + + LLViewerFetchedTexture* fetched_texture = gTextureList.findImage(entry->getID(), TEX_LIST_STANDARD); + if (fetched_texture && fetched_texture->getFTType() == FTT_SERVER_BAKE) + { + const LLUUID new_id = LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary::localTextureIndexToMagicId((LLAvatarAppearanceDefines::ETextureIndex)fetched_texture->getBakedTextureIndex()); + entry->setID(new_id.notNull() ? new_id : IMG_DEFAULT_AVATAR); + } + } + } + packTEMessage(msg); + if (last_face_index > -1) + { + S8 face_index; + for (face_index = 0; face_index <= last_face_index; face_index++) + { + LLTextureEntry* entry = getTE((U8)face_index); + entry->setID(texture_id[face_index]); + } + } + LLViewerRegion *regionp = getRegion(); msg->sendReliable( regionp->getHost() ); } +LLViewerTexture* LLViewerObject::getBakedTextureForMagicId(const LLUUID& id) +{ + if (!LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary::isBakedImageId(id)) + { + return NULL; + } + + LLVOAvatar* avatar = getAvatar(); + if (avatar) + { + LLAvatarAppearanceDefines::ETextureIndex texIndex = LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary::bakedToLocalTextureIndex(LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary::assetIdToBakedTextureIndex(id)); + return avatar->getBakedTextureImage(texIndex, avatar->getTE(texIndex)->getID()); + } + + return NULL; +} + +LLTextureEntry* LLViewerObject::getBakedTextureEntryForMagicId(const LLUUID& id) +{ + if (!LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary::isBakedImageId(id)) + { + return NULL; + } + + LLVOAvatar* avatar = getAvatar(); + if (avatar) + { + LLAvatarAppearanceDefines::ETextureIndex texIndex = LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary::bakedToLocalTextureIndex(LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary::assetIdToBakedTextureIndex(id)); + return avatar->getTE(texIndex); + } + + return NULL; +} + void LLViewerObject::setTE(const U8 te, const LLTextureEntry &texture_entry) { - LLPrimitive::setTE(te, texture_entry); + const LLTextureEntry* baked_entry = getBakedTextureEntryForMagicId(texture_entry.getID()); + if (baked_entry) + { + LLPrimitive::setTE(te, *baked_entry); + + const LLUUID& image_id = baked_entry->getID(); + mTEImages[te] = getBakedTextureForMagicId(image_id); + } + else + { + LLPrimitive::setTE(te, texture_entry); const LLUUID& image_id = getTE(te)->getID(); mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); - - if (getTE(te)->getMaterialParams().notNull()) - { - const LLUUID& norm_id = getTE(te)->getMaterialParams()->getNormalID(); - mTENormalMaps[te] = LLViewerTextureManager::getFetchedTexture(norm_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); - - const LLUUID& spec_id = getTE(te)->getMaterialParams()->getSpecularID(); - mTESpecularMaps[te] = LLViewerTextureManager::getFetchedTexture(spec_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); + + if (getTE(te)->getMaterialParams().notNull()) + { + const LLUUID& norm_id = getTE(te)->getMaterialParams()->getNormalID(); + mTENormalMaps[te] = LLViewerTextureManager::getFetchedTexture(norm_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); + + const LLUUID& spec_id = getTE(te)->getMaterialParams()->getSpecularID(); + mTESpecularMaps[te] = LLViewerTextureManager::getFetchedTexture(spec_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); + } } + } void LLViewerObject::setTEImage(const U8 te, LLViewerTexture *imagep) { + if (imagep) + { + LLViewerTexture* baked_texture = getBakedTextureForMagicId(imagep->getID()); + if (baked_texture) + { + imagep = baked_texture; + } + } + if (mTEImages[te] != imagep) { mTEImages[te] = imagep; @@ -4397,6 +4485,15 @@ void LLViewerObject::setTEImage(const U8 te, LLViewerTexture *imagep) S32 LLViewerObject::setTETextureCore(const U8 te, LLViewerTexture *image) { + if (image) + { + LLViewerTexture* baked_texture = getBakedTextureForMagicId(image->getID()); + if (baked_texture) + { + image = baked_texture; + } + } + const LLUUID& uuid = image->getID(); S32 retval = 0; if (uuid != getTE(te)->getID() || @@ -4492,9 +4589,18 @@ void LLViewerObject::changeTESpecularMap(S32 index, LLViewerTexture* new_image) S32 LLViewerObject::setTETexture(const U8 te, const LLUUID& uuid) { // Invalid host == get from the agent's sim - LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture( - uuid, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, LLHost()); - return setTETextureCore(te,image); + + LLViewerTexture* baked_texture = getBakedTextureForMagicId(uuid); + if (baked_texture) + { + return setTETextureCore(te, baked_texture); + } + else + { + LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture( + uuid, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, LLHost()); + return setTETextureCore(te, image); + } } S32 LLViewerObject::setTENormalMap(const U8 te, const LLUUID& uuid) diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 7a490f6957..bac96991fa 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -566,6 +566,10 @@ public: friend class LLViewerObjectList; friend class LLViewerMediaList; +private: + LLViewerTexture* getBakedTextureForMagicId(const LLUUID& id); + LLTextureEntry* getBakedTextureEntryForMagicId(const LLUUID& id); + public: static void unpackVector3(LLDataPackerBinaryBuffer* dp, LLVector3& value, std::string name); static void unpackUUID(LLDataPackerBinaryBuffer* dp, LLUUID& value, std::string name); diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index c9dea17f63..2bd2f83e93 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -417,6 +417,9 @@ public: void setInFastCacheList(bool in_list) { mInFastCacheList = in_list; } bool isInFastCacheList() { return mInFastCacheList; } + U8 getBakedTextureIndex() { return mBakedTextureIndex; } + void setBakedTextureIndex(U8 index) { mBakedTextureIndex = index; } + /*virtual*/bool isActiveFetching(); //is actively in fetching by the fetching pipeline. protected: @@ -519,6 +522,8 @@ protected: BOOL mForSculpt ; //a flag if the texture is used as sculpt data. BOOL mIsFetched ; //is loaded from remote or from cache, not generated locally. + U8 mBakedTextureIndex; //for FTT_SERVER_BAKE fetched textures + public: static LLPointer sMissingAssetImagep; // Texture to show for an image asset that is not in the database static LLPointer sWhiteImagep; // Texture to show NOTHING (whiteness) diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index d7080051da..ce32bb186f 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -61,6 +61,8 @@ #include "llviewerdisplay.h" #include "llviewerwindow.h" #include "llprogressview.h" + +#include "llvoavatarself.h" //////////////////////////////////////////////////////////////////////////// void (*LLViewerTextureList::sUUIDCallback)(void **, const LLUUID&) = NULL; @@ -503,12 +505,15 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id, // If the image is not found, creates new image and // enqueues a request for transmission + LLPointer imagep = NULL; + if (image_id.isNull()) { return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI)); } - LLPointer imagep = findImage(image_id, get_element_type(boost_priority)); + imagep = imagep.isNull() ? findImage(image_id, get_element_type(boost_priority)) : imagep; + if (!imagep.isNull()) { LLViewerFetchedTexture *texture = imagep.get(); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index eae8f2cc56..af98f78d0d 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2224,6 +2224,8 @@ LLViewerFetchedTexture *LLVOAvatar::getBakedTextureImage(const U8 te, const LLUU { result->setIsMissingAsset(false); } + + result->setBakedTextureIndex(te); } return result; } @@ -7413,6 +7415,9 @@ void LLVOAvatar::updateMeshTextures() removeMissingBakedTextures(); // May call back into this function if anything is removed call_remove_missing = true; } + + + } // virtual @@ -8189,6 +8194,45 @@ void LLVOAvatar::applyParsedAppearanceMessage(LLAppearanceMessageContents& conte } updateMeshTextures(); + + //refresh bakes on any attached objects + for (attachment_map_t::iterator iter = mAttachmentPoints.begin(); + iter != mAttachmentPoints.end(); + ++iter) + { + LLViewerJointAttachment* attachment = iter->second; + + for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin(); + attachment_iter != attachment->mAttachedObjects.end(); + ++attachment_iter) + { + LLViewerObject* attached_object = (*attachment_iter); + + const U32 MAX_TES = 32; + + S32 last_face_index = llmin((U32)attached_object->getNumTEs(), MAX_TES) - 1; + + if (last_face_index > -1) + { + S8 face_index; + for (face_index = 0; face_index <= last_face_index; face_index++) + { + LLViewerTexture* viewer_texture = attached_object->getTEImage((U8)face_index); + + if (viewer_texture && ( (viewer_texture->getType() == LLViewerTexture::FETCHED_TEXTURE) || (viewer_texture->getType() == LLViewerTexture::LOD_TEXTURE) )) + { + LLViewerFetchedTexture* fetched_texture = dynamic_cast(viewer_texture); + if (fetched_texture->getFTType() == FTT_SERVER_BAKE) + { + const LLUUID new_id = LLAvatarAppearanceDefines::LLAvatarAppearanceDictionary::localTextureIndexToMagicId((LLAvatarAppearanceDefines::ETextureIndex)fetched_texture->getBakedTextureIndex()); + attached_object->setTETexture(face_index, new_id); + } + + } + } + } + } + } } // static diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index bd89d4ef23..4f876533ee 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -569,6 +569,7 @@ public: public: /*virtual*/ LLTexLayerSet* createTexLayerSet(); // Return LLViewerTexLayerSet void releaseComponentTextures(); // ! BACKWARDS COMPATIBILITY ! + protected: static void onBakedTextureMasksLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata); static void onInitialBakedTextureLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata); diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml index 53618b684b..9bce037cba 100644 --- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml @@ -52,7 +52,7 @@ control_name="mode_selection" height="20" layout="topleft" - left="18" + left="0" top_pad="80" name="mode_selection" follows="left|top"> @@ -64,7 +64,7 @@ height="16" left="0" value="0" - width="80" /> + width="70" /> + width="50" /> + @@ -83,7 +92,7 @@ follows="left|top" height="14" layout="topleft" - left_delta="-12" + left_delta="12" name="unknown" top_pad="4"> Size: [DIMENSIONS] @@ -225,7 +234,60 @@ - + + + + + + + + + + + + - - - Comment (optional): - - - - - - diff --git a/indra/newview/skins/default/xui/en/panel_facebook_place.xml b/indra/newview/skins/default/xui/en/panel_facebook_place.xml deleted file mode 100644 index f87b008c4e..0000000000 --- a/indra/newview/skins/default/xui/en/panel_facebook_place.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - Say something about where you are: - - - - - - - - - - - - - - diff --git a/indra/newview/skins/default/xui/en/panel_facebook_status.xml b/indra/newview/skins/default/xui/en/panel_facebook_status.xml deleted file mode 100644 index fe0f3c9279..0000000000 --- a/indra/newview/skins/default/xui/en/panel_facebook_status.xml +++ /dev/null @@ -1,130 +0,0 @@ - - - - - Not connected to Facebook. - - - - - - - - [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share-Facebook/ta-p/2149711 Learn about posting to Facebook] - - - - - What's on your mind? - - - - - - diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 8fc0f6f642..a47121ae99 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -367,24 +367,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M show_permissions_granted="true" top="0" width="307" /> - - - - + - + + -- cgit v1.2.3 From 8525ad02a4745878a95b8077e0d5a33b7f55dda5 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Mon, 24 Sep 2018 21:39:36 +0300 Subject: SL-9691 Ban duration floater - Added validation of input values to the 'hours' field --- indra/newview/skins/default/xui/en/floater_ban_duration.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/floater_ban_duration.xml b/indra/newview/skins/default/xui/en/floater_ban_duration.xml index 2d9e69f7c7..b0c961c3c9 100644 --- a/indra/newview/skins/default/xui/en/floater_ban_duration.xml +++ b/indra/newview/skins/default/xui/en/floater_ban_duration.xml @@ -55,7 +55,7 @@ Date: Mon, 24 Sep 2018 21:46:55 +0300 Subject: SL-9694 Ban duration floater - Increased spinner width --- indra/newview/skins/default/xui/en/floater_ban_duration.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_ban_duration.xml b/indra/newview/skins/default/xui/en/floater_ban_duration.xml index b0c961c3c9..5562f28877 100644 --- a/indra/newview/skins/default/xui/en/floater_ban_duration.xml +++ b/indra/newview/skins/default/xui/en/floater_ban_duration.xml @@ -66,13 +66,13 @@ name="ban_hours" top_delta="50" left="40" - width="40"/> + width="60"/> -- cgit v1.2.3 From b13b56af315b7041b81ca43985a9790a5a01e1bc Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Mon, 24 Sep 2018 21:50:19 +0300 Subject: SL-9695 About Land floater - Column width adjustment --- indra/newview/skins/default/xui/en/floater_about_land.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml index 841b11e3bc..d04e738b22 100644 --- a/indra/newview/skins/default/xui/en/floater_about_land.xml +++ b/indra/newview/skins/default/xui/en/floater_about_land.xml @@ -2092,11 +2092,11 @@ Only large parcels can be listed in search. + width="155" /> + width="75" /> + + + + + + + + + L$ [AMT] + + + + + + Date: Tue, 8 Jan 2019 14:15:44 +0200 Subject: SL-10320 FIXED Crash in LLVOAvatar::updateAttachmentOverrides() --- indra/newview/llvoavatar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 321f774210..2682c5b698 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -5992,7 +5992,7 @@ void LLVOAvatar::rebuildAttachmentOverrides() LLViewerObject *vo = *at_it; // Attached animated objects affect joints in their control // avs, not the avs to which they are attached. - if (!vo->isAnimatedObject()) + if (vo && !vo->isAnimatedObject()) { addAttachmentOverridesForObject(vo); } @@ -6043,7 +6043,7 @@ void LLVOAvatar::updateAttachmentOverrides() LLViewerObject *vo = *at_it; // Attached animated objects affect joints in their control // avs, not the avs to which they are attached. - if (!vo->isAnimatedObject()) + if (vo && !vo->isAnimatedObject()) { addAttachmentOverridesForObject(vo, &meshes_seen); } -- cgit v1.2.3 From 4316f1d322bc8e0439780d68442d76b17927247c Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Tue, 8 Jan 2019 21:28:47 +0000 Subject: SL-10285 - removed one possible route for the isImpostor() crash. Intermittent issue. --- indra/newview/llcontrolavatar.cpp | 2 ++ indra/newview/llviewerobject.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp index d3fd5813a0..0f02c23cb0 100644 --- a/indra/newview/llcontrolavatar.cpp +++ b/indra/newview/llcontrolavatar.cpp @@ -60,6 +60,8 @@ LLControlAvatar::LLControlAvatar(const LLUUID& id, const LLPCode pcode, LLViewer // virtual LLControlAvatar::~LLControlAvatar() { + // Should already have been unlinked before destruction + llassert(!mRootVolp); } // virtual diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 007adf2a72..ec1095813b 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -3100,6 +3100,7 @@ void LLViewerObject::unlinkControlAvatar() if (mControlAvatar) { mControlAvatar->markForDeath(); + mControlAvatar->mRootVolp = NULL; mControlAvatar = NULL; } } -- cgit v1.2.3 From 7621b342733d0d28c4bf4ca84f8a671b6a07b6bb Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Fri, 18 Jan 2019 18:19:27 +0200 Subject: SL-1942 Fixed the estate list change Confirmation messages to show agent names properly --- indra/newview/llfloaterregioninfo.cpp | 64 +++++++++++++++++++++-------------- indra/newview/llfloaterregioninfo.h | 2 +- 2 files changed, 40 insertions(+), 26 deletions(-) diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 970bbe6c89..eb48bf8c1c 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -1696,11 +1696,13 @@ struct LLEstateAccessChangeInfo LLSD sd; sd["name"] = mDialogName; sd["operation"] = (S32)mOperationFlag; - for (uuid_vec_t::const_iterator it = mAgentOrGroupIDs.begin(); - it != mAgentOrGroupIDs.end(); - ++it) + for (U32 i = 0; i < mAgentOrGroupIDs.size(); ++i) { - sd["allowed_ids"].append(*it); + sd["allowed_ids"].append(mAgentOrGroupIDs[i]); + if (mAgentNames.size() > i) + { + sd["allowed_names"].append(mAgentNames[i].asLLSD()); + } } return sd; } @@ -1708,6 +1710,7 @@ struct LLEstateAccessChangeInfo U32 mOperationFlag; // ESTATE_ACCESS_BANNED_AGENT_ADD, _REMOVE, etc. std::string mDialogName; uuid_vec_t mAgentOrGroupIDs; // List of agent IDs to apply to this change + std::vector mAgentNames; // Optional list of the agent names for notifications }; // static @@ -3597,7 +3600,7 @@ bool LLPanelEstateAccess::accessAddCore2(const LLSD& notification, const LLSD& r } // avatar picker yes multi-select, yes close-on-select - LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateAccess::accessAddCore3, _1, (void*)change_info), + LLFloater* child_floater = LLFloaterAvatarPicker::show(boost::bind(&LLPanelEstateAccess::accessAddCore3, _1, _2, (void*)change_info), TRUE, TRUE, FALSE, parent_floater_name, button); //Allows the closed parent floater to close the child floater (avatar picker) @@ -3610,7 +3613,7 @@ bool LLPanelEstateAccess::accessAddCore2(const LLSD& notification, const LLSD& r } // static -void LLPanelEstateAccess::accessAddCore3(const uuid_vec_t& ids, void* data) +void LLPanelEstateAccess::accessAddCore3(const uuid_vec_t& ids, std::vector names, void* data) { LLEstateAccessChangeInfo* change_info = (LLEstateAccessChangeInfo*)data; if (!change_info) return; @@ -3646,11 +3649,12 @@ void LLPanelEstateAccess::accessAddCore3(const uuid_vec_t& ids, void* data) } uuid_vec_t ids_allowed; + std::vector names_allowed; std::string already_allowed; bool single = true; - for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it) + for (U32 i = 0; i < ids.size(); ++i) { - LLScrollListItem* item = name_list->getNameItemByAgentId(*it); + LLScrollListItem* item = name_list->getNameItemByAgentId(ids[i]); if (item) { if (!already_allowed.empty()) @@ -3662,7 +3666,8 @@ void LLPanelEstateAccess::accessAddCore3(const uuid_vec_t& ids, void* data) } else { - ids_allowed.push_back(*it); + ids_allowed.push_back(ids[i]); + names_allowed.push_back(names[i]); } } if (!already_allowed.empty()) @@ -3678,6 +3683,7 @@ void LLPanelEstateAccess::accessAddCore3(const uuid_vec_t& ids, void* data) } } change_info->mAgentOrGroupIDs = ids_allowed; + change_info->mAgentNames = names_allowed; } if (change_info->mOperationFlag & ESTATE_ACCESS_BANNED_AGENT_ADD) { @@ -3697,13 +3703,14 @@ void LLPanelEstateAccess::accessAddCore3(const uuid_vec_t& ids, void* data) } uuid_vec_t ids_allowed; + std::vector names_allowed; std::string already_banned; std::string em_ban; bool single = true; - for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it) + for (U32 i = 0; i < ids.size(); ++i) { bool is_allowed = true; - LLScrollListItem* em_item = em_list->getNameItemByAgentId(*it); + LLScrollListItem* em_item = em_list->getNameItemByAgentId(ids[i]); if (em_item) { if (!em_ban.empty()) @@ -3714,7 +3721,7 @@ void LLPanelEstateAccess::accessAddCore3(const uuid_vec_t& ids, void* data) is_allowed = false; } - LLScrollListItem* item = name_list->getNameItemByAgentId(*it); + LLScrollListItem* item = name_list->getNameItemByAgentId(ids[i]); if (item) { if (!already_banned.empty()) @@ -3728,7 +3735,8 @@ void LLPanelEstateAccess::accessAddCore3(const uuid_vec_t& ids, void* data) if (is_allowed) { - ids_allowed.push_back(*it); + ids_allowed.push_back(ids[i]); + names_allowed.push_back(names[i]); } } if (!em_ban.empty()) @@ -3755,6 +3763,7 @@ void LLPanelEstateAccess::accessAddCore3(const uuid_vec_t& ids, void* data) } } change_info->mAgentOrGroupIDs = ids_allowed; + change_info->mAgentNames = names_allowed; } LLSD args; @@ -3877,12 +3886,9 @@ bool LLPanelEstateAccess::accessCoreConfirm(const LLSD& notification, const LLSD std::string names; U32 listed_names = 0; - LLSD::array_const_iterator end_it = notification["payload"]["allowed_ids"].endArray(); - for (LLSD::array_const_iterator iter = notification["payload"]["allowed_ids"].beginArray(); - iter != end_it; - iter++) + for (U32 i = 0; i < notification["payload"]["allowed_ids"].size(); ++i) { - if (iter + 1 != end_it) + if (i + 1 != notification["payload"]["allowed_ids"].size()) { flags |= ESTATE_ACCESS_NO_REPLY; } @@ -3891,7 +3897,7 @@ bool LLPanelEstateAccess::accessCoreConfirm(const LLSD& notification, const LLSD flags &= ~ESTATE_ACCESS_NO_REPLY; } - const LLUUID id = iter->asUUID(); + const LLUUID id = notification["payload"]["allowed_ids"][i].asUUID(); if (((U32)notification["payload"]["operation"].asInteger() & ESTATE_ACCESS_BANNED_AGENT_ADD) && region && (region->getOwner() == id)) { @@ -3906,15 +3912,23 @@ bool LLPanelEstateAccess::accessCoreConfirm(const LLSD& notification, const LLSD // fill the name list for confirmation if (listed_names < MAX_LISTED_NAMES) { - LLAvatarName av_name; - if (LLAvatarNameCache::get(id, &av_name)) + if (!names.empty()) + { + names += ", "; + } + if (!notification["payload"]["allowed_names"][i]["display_name"].asString().empty()) { - if (!names.empty()) + names += notification["payload"]["allowed_names"][i]["display_name"].asString(); + } + else + { //try to get an agent name from cache + LLAvatarName av_name; + if (LLAvatarNameCache::get(id, &av_name)) { - names += ", "; + names += av_name.getCompleteName(); } - names += av_name.getCompleteName(); - } + } + } listed_names++; } diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index e2453181d2..d0b978e38e 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -532,7 +532,7 @@ private: // Core methods for all above add/remove button clicks static void accessAddCore(U32 operation_flag, const std::string& dialog_name); static bool accessAddCore2(const LLSD& notification, const LLSD& response); - static void accessAddCore3(const uuid_vec_t& ids, void* data); + static void accessAddCore3(const uuid_vec_t& ids, std::vector names, void* data); static void accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name); static bool accessRemoveCore2(const LLSD& notification, const LLSD& response); -- cgit v1.2.3 From 3e0e141b7651a8ed20ec310fa4557d2a5c9fcd89 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Thu, 7 Feb 2019 21:59:13 +0200 Subject: SL-1036 Update estate access lists on the agent's access level change --- indra/newview/llfloaterregioninfo.cpp | 25 ++++++++++++++++--------- indra/newview/llfloaterregioninfo.h | 1 + 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index eb48bf8c1c..ec934a4732 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3339,34 +3339,41 @@ void LLPanelEstateAccess::updateControls(LLViewerRegion* region) BOOL god = gAgent.isGodlike(); BOOL owner = (region && (region->getOwner() == gAgent.getID())); BOOL manager = (region && region->isEstateManager()); - setCtrlsEnabled(god || owner || manager); + BOOL enable_cotrols = god || owner || manager; + setCtrlsEnabled(enable_cotrols); BOOL has_allowed_avatar = getChild("allowed_avatar_name_list")->getFirstSelected() ? TRUE : FALSE; BOOL has_allowed_group = getChild("allowed_group_name_list")->getFirstSelected() ? TRUE : FALSE; BOOL has_banned_agent = getChild("banned_avatar_name_list")->getFirstSelected() ? TRUE : FALSE; BOOL has_estate_manager = getChild("estate_manager_name_list")->getFirstSelected() ? TRUE : FALSE; - getChildView("add_allowed_avatar_btn")->setEnabled(god || owner || manager); - getChildView("remove_allowed_avatar_btn")->setEnabled(has_allowed_avatar && (god || owner || manager)); - getChildView("allowed_avatar_name_list")->setEnabled(god || owner || manager); + getChildView("add_allowed_avatar_btn")->setEnabled(enable_cotrols); + getChildView("remove_allowed_avatar_btn")->setEnabled(has_allowed_avatar && enable_cotrols); + getChildView("allowed_avatar_name_list")->setEnabled(enable_cotrols); - getChildView("add_allowed_group_btn")->setEnabled(god || owner || manager); - getChildView("remove_allowed_group_btn")->setEnabled(has_allowed_group && (god || owner || manager)); - getChildView("allowed_group_name_list")->setEnabled(god || owner || manager); + getChildView("add_allowed_group_btn")->setEnabled(enable_cotrols); + getChildView("remove_allowed_group_btn")->setEnabled(has_allowed_group && enable_cotrols); + getChildView("allowed_group_name_list")->setEnabled(enable_cotrols); // Can't ban people from mainland, orientation islands, etc. because this // creates much network traffic and server load. // Disable their accounts in CSR tool instead. bool linden_estate = LLPanelEstateInfo::isLindenEstate(); - bool enable_ban = (god || owner || manager) && !linden_estate; + bool enable_ban = enable_cotrols && !linden_estate; getChildView("add_banned_avatar_btn")->setEnabled(enable_ban); getChildView("remove_banned_avatar_btn")->setEnabled(has_banned_agent && enable_ban); - getChildView("banned_avatar_name_list")->setEnabled(god || owner || manager); + getChildView("banned_avatar_name_list")->setEnabled(enable_cotrols); // estate managers can't add estate managers getChildView("add_estate_manager_btn")->setEnabled(god || owner); getChildView("remove_estate_manager_btn")->setEnabled(has_estate_manager && (god || owner)); getChildView("estate_manager_name_list")->setEnabled(god || owner); + + if (enable_cotrols != mCtrlsEnabled) + { + mCtrlsEnabled = enable_cotrols; + updateLists(); // update the lists on the agent's access level change + } } //--------------------------------------------------------------------------- diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index d0b978e38e..5d0f5fc6fc 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -549,6 +549,7 @@ private: void copyListToClipboard(std::string list_name); bool mPendingUpdate; + BOOL mCtrlsEnabled; }; #endif -- cgit v1.2.3 From b417be1781637ff9d35b338eed1678e7bb6f04ad Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Tue, 8 Jan 2019 21:28:47 +0000 Subject: SL-10285 - removed one possible route for the isImpostor() crash. Intermittent issue. --- indra/newview/llcontrolavatar.cpp | 2 ++ indra/newview/llviewerobject.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp index d3fd5813a0..0f02c23cb0 100644 --- a/indra/newview/llcontrolavatar.cpp +++ b/indra/newview/llcontrolavatar.cpp @@ -60,6 +60,8 @@ LLControlAvatar::LLControlAvatar(const LLUUID& id, const LLPCode pcode, LLViewer // virtual LLControlAvatar::~LLControlAvatar() { + // Should already have been unlinked before destruction + llassert(!mRootVolp); } // virtual diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 1e46a1cf9e..226283e1b2 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -3072,6 +3072,7 @@ void LLViewerObject::unlinkControlAvatar() if (mControlAvatar) { mControlAvatar->markForDeath(); + mControlAvatar->mRootVolp = NULL; mControlAvatar = NULL; } } -- cgit v1.2.3 From cd859cd9e8a032d2d708788893654e5ceaadac09 Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Wed, 9 Jan 2019 10:57:15 +0200 Subject: SL-10321 FIXED 'Uploads' tab is not displayed after any search in Preferences --- indra/newview/llsearchableui.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indra/newview/llsearchableui.cpp b/indra/newview/llsearchableui.cpp index 6058079ae4..de90896548 100644 --- a/indra/newview/llsearchableui.cpp +++ b/indra/newview/llsearchableui.cpp @@ -70,6 +70,11 @@ bool ll::prefs::PanelData::hightlightAndHide( LLWString const &aFilter ) for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr ) (*itr)->setNotHighlighted( ); + if (aFilter.empty()) + { + return true; + } + bool bVisible(false); for( tSearchableItemList::iterator itr = mChildren.begin(); itr != mChildren.end(); ++itr ) bVisible |= (*itr)->hightlightAndHide( aFilter ); -- cgit v1.2.3 From 1349eacc5cddb8d8522b4250cd3e7e54de55de2d Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Wed, 9 Jan 2019 17:21:13 +0200 Subject: SL-10325 FIXED Preferences tabs are displayed incorrectly if hovering it while searching any keyword --- indra/llui/lltabcontainer.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 9c8636f936..6521b883f8 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -736,11 +736,11 @@ BOOL LLTabContainer::handleToolTip( S32 x, S32 y, MASK mask) { for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter) { - LLTabTuple* tuple = *iter; - tuple->mButton->setVisible( TRUE ); - S32 local_x = x - tuple->mButton->getRect().mLeft; - S32 local_y = y - tuple->mButton->getRect().mBottom; - handled = tuple->mButton->handleToolTip( local_x, local_y, mask); + LLButton* tab_button = (*iter)->mButton; + if (!tab_button->getVisible()) continue; + S32 local_x = x - tab_button->getRect().mLeft; + S32 local_y = y - tab_button->getRect().mBottom; + handled = tab_button->handleToolTip(local_x, local_y, mask); if( handled ) { break; -- cgit v1.2.3 From fdf39d3cf4ece8e587dcc865b1c6d5ab12e66948 Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Thu, 10 Jan 2019 15:41:48 +0200 Subject: SL-10329 Increase panel height to avoid message overlapping --- indra/newview/skins/default/xui/en/floater_model_preview.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml index e073268b0a..a07fe99aef 100644 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml @@ -34,7 +34,6 @@ LOD materials are not a subset of reference model. Some physical hulls exceed vertex limitations. The physics mesh too dense remove the small thin triangles (see preview) - The Firestorm OpenSim build is not supported for physics upload in SL. All Analyzing... Simplifying... @@ -1223,7 +1222,7 @@ You dont have rights to upload mesh models. [[VURL] Find out how] to get certified. - + [STATUS] -- cgit v1.2.3 From 02aa64e195c25087e9cf7c7f32a851d8b84d2798 Mon Sep 17 00:00:00 2001 From: eli Date: Thu, 10 Jan 2019 16:46:49 -0800 Subject: FIX INTL-324 Viewer Set55 translation (viewer-neko) --- .../newview/skins/default/xui/de/notifications.xml | 36 ++++++++++++---------- indra/newview/skins/default/xui/de/strings.xml | 21 +++++++++++++ .../newview/skins/default/xui/es/notifications.xml | 35 ++++++++++++--------- indra/newview/skins/default/xui/es/strings.xml | 21 +++++++++++++ .../newview/skins/default/xui/fr/notifications.xml | 36 ++++++++++++---------- indra/newview/skins/default/xui/fr/strings.xml | 21 +++++++++++++ .../newview/skins/default/xui/it/notifications.xml | 34 +++++++++++--------- indra/newview/skins/default/xui/it/strings.xml | 21 +++++++++++++ .../newview/skins/default/xui/ja/notifications.xml | 34 +++++++++++--------- indra/newview/skins/default/xui/ja/strings.xml | 21 +++++++++++++ .../newview/skins/default/xui/pt/notifications.xml | 36 ++++++++++++---------- indra/newview/skins/default/xui/pt/strings.xml | 21 +++++++++++++ .../newview/skins/default/xui/ru/notifications.xml | 36 ++++++++++++---------- indra/newview/skins/default/xui/ru/strings.xml | 21 +++++++++++++ .../newview/skins/default/xui/tr/notifications.xml | 36 ++++++++++++---------- indra/newview/skins/default/xui/tr/strings.xml | 21 +++++++++++++ .../newview/skins/default/xui/zh/notifications.xml | 32 ++++++++++--------- indra/newview/skins/default/xui/zh/strings.xml | 21 +++++++++++++ 18 files changed, 366 insertions(+), 138 deletions(-) diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index 43af1d8655..57dbaa0ea6 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -244,6 +244,10 @@ Wählen Sie ein einzelnes Objekt aus und versuchen Sie es erneut. Hinweis: Bei Aktivierung dieser Option sehen alle Personen, die diesen Computer benutzen, Ihre Lieblingsorte. + + Das Starten mehrerer Second Life Viewer wird nicht unterstützt. Dies kann zu Kollisionen des Textur-Caches, Fehlern sowie verschlechterter Grafik und Leistung führen. + + Wenn Sie einem anderen Einwohner Änderungsrechte gewähren, dann kann dieser JEDES Objekt, das Sie inworld besitzen, ändern, löschen oder an sich nehmen. Seien Sie daher beim Gewähren dieser Rechte sehr vorsichtig! Möchten Sie [NAME] Änderungsrechte gewähren? @@ -725,9 +729,9 @@ Sie können die Grafikqualität unter Einstellungen > Grafik wieder erhöhen. Sie sind nicht zum Terraformen der Parzelle „[PARCEL]“ berechtigt. - Sie sind nicht berechtigt, die folgenden Objekte zu kopieren: -[ITEMS] -Wenn Sie diese weitergeben, werden sie aus Ihrem Inventar entfernt. Möchten Sie diese Objekte wirklich weggeben? + Sie sind nicht berechtigt, die folgenden Objekte zu kopieren: +<nolink>[ITEMS]</nolink> +und die Objekte werden aus Ihrem Inventar gelöscht, wenn Sie diese weggeben. Möchten Sie diese Objekte wirklich weggeben? @@ -3730,13 +3734,13 @@ es sich nicht in der gleichen Region befindet wie Sie. Auf Land, das Sie nicht besitzen, können Sie keine Bäume und Gräser erstellen. - Kopieren fehlgeschlagen, da Sie keine Berechtigung zum Kopieren des Objekts „OBJ_NAME]“ besitzen. + Kopieren fehlgeschlagen, da Sie nicht über die Berechtigung zum Kopieren des Objekts <nolink>'[OBJ_NAME]'</nolink> verfügen. - Kopieren fehlgeschlagen, weil Objekt „[OBJ_NAME]“ nicht an Sie übertragen werden kann. + Kopieren fehlgeschlagen, da das Objekt <nolink>'[OBJ_NAME]'</nolink> nicht an Sie übertragen werden kann. - Kopieren fehlgeschlagen, weil Objekt „[OBJ_NAME]“ zum Navmesh beiträgt. + Kopieren fehlgeschlagen, da das Objekt <nolink>'[OBJ_NAME]'</nolink> zum Navmesh beiträgt. Ohne ausgewählte Hauptobjekte duplizieren. @@ -3781,34 +3785,34 @@ Warten Sie kurz und versuchen Sie es noch einmal. Erneutes Speichern im Inventar ist deaktiviert. - „[OBJ_NAME]“ kann nicht im Objektinhalt gespeichert werden, da das Objekt, aus dem es gerezzt wurde, nicht mehr existiert. + <nolink>'[OBJ_NAME]'</nolink> kann nicht im Objektinhalt gespeichert werden, da das Objekt, aus dem es gerezzt wurde, nicht mehr existiert. - „[OBJ_NAME]“ kann nicht in Objektinhalt gespeichert werden, da Sie nicht die Berechtigung zum Modifizieren des Objekts „[DEST_NAME]“ besitzen. + <nolink>'[OBJ_NAME]'</nolink> kann nicht in Objektinhalt gespeichert werden, da Sie nicht über die Berechtigung zum Modifizieren des Objekts <nolink>'[DEST_NAME]'</nolink> verfügen. - „[OBJ_NAME]“ kann nicht erneut im Inventar gespeichert werden – dieser Vorgang wurde deaktiviert. + <nolink>'[OBJ_NAME]'</nolink> kann nicht erneut im Inventar gespeichert werden – dieser Vorgang wurde deaktiviert. - Sie können Ihre Auswahl nicht kopieren, da Sie nicht die Berechtigung zum Kopieren des Objekts „[OBJ_NAME]“ haben. + Sie können Ihre Auswahl nicht kopieren, da Sie nicht über die Berechtigung zum Kopieren des Objekts <nolink>'[OBJ_NAME]'</nolink> verfügen. - Sie können Ihre Auswahl nicht kopieren, da das Objekt „[OBJ_NAME]“ nicht übertragbar ist. + Sie können Ihre Auswahl nicht kopieren, da das Objekt <nolink>'[OBJ_NAME]'</nolink> nicht übertragbar ist. - Sie können Ihre Auswahl nicht kopieren, da das Objekt „[OBJ_NAME]“ nicht übertragbar ist. + Sie können Ihre Auswahl nicht kopieren, da das Objekt <nolink>'[OBJ_NAME]'</nolink> nicht übertragbar ist. - Entfernen des Objekts „[OBJ_NAME]“ aus dem Simulator wird vom Berechtigungssystem nicht gestattet. + Entfernen des Objekts <nolink>'[OBJ_NAME]'</nolink> aus dem Simulator wird vom Berechtigungssystem nicht gestattet. - Sie können Ihre Auswahl nicht speichern, da Sie keine Berechtigung zum Modifizieren des Objekts „[OBJ_NAME]“ besitzen. + Sie können Ihre Auswahl nicht speichern, da Sie nicht über die Berechtigung zum Modifizieren des Objekts <nolink>'[OBJ_NAME]'</nolink> verfügen. - Ihre Auswahl kann nicht gespeichert werden, da das Objekt „[OBJ_NAME]“ nicht kopiert werden kann. + Ihre Auswahl kann nicht gespeichert werden, da das Objekt <nolink>'[OBJ_NAME]'</nolink> nicht kopiert werden kann. - Sie können Ihre Auswahl nicht in Empfang nehmen, da Sie nicht die Berechtigung zum Modifizieren des Objekts „[OBJ_NAME]“ haben. + Sie können Ihre Auswahl nicht in Empfang nehmen, da Sie nicht über die Berechtigung zum Modifizieren des Objekts <nolink>'[OBJ_NAME]'</nolink> verfügen. Interner Fehler: Unbekannter Zielttyp. diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index cde04d8d69..78d445f362 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -5740,4 +5740,25 @@ Setzen Sie den Editorpfad in Anführungszeichen Die Physikform hat keine korrekte Version. Legen Sie die korrekte Version für das Physikmodell fest. + + Der DNS konnte den Hostnamen ([HOSTNAME]) nicht auflösen Prüfen +Sie bitte, ob Sie die Website www.secondlife.com aufrufen können. Wenn Sie die +Website aufrufen können, jedoch weiterhin diese Fehlermeldung erhalten, +besuchen Sie bitte den Support-Bereich und melden Sie das Problem. + + + Der Anmeldeserver konnte sich nicht per SSL verifizieren. +Wenn Sie diese Fehlermeldung weiterhin erhalten, besuchen +Sie bitte den Support-Bereich der Website Secondlife.com +und melden Sie das Problem. + + + Die Ursache hierfür ist häufig eine falsch eingestellte Uhrzeit auf Ihrem Computer. +Bitte vergewissern Sie sich, dass Datum und Uhrzeit in der Systemsteuerung korrekt +eingestellt sind. Überprüfen Sie außerdem, ob Ihre Netzwerk- und Firewall-Einstellungen +korrekt sind. Wenn Sie diese Fehlermeldung weiterhin erhalten, besuchen Sie bitte den +Support-Bereich der Website Secondlife.com und melden Sie das Problem. + +[https://community.secondlife.com/knowledgebase/english/error-messages-r520/#Section__3 Knowledge-Base] + diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index 70825eadbe..7b1185c4c3 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -243,6 +243,10 @@ La inicialización del mercado ha fallado por un error del sistema o de la red. Nota: Al activar esta opción, cualquiera que utilice este ordenador podrá ver tu lista de lugares favoritos. + + No es posible ejecutar varios visores Second Life ya que esta funcionalidad no es compatible. Puede provocar problemas de caché en la textura, imágenes degradadas o alteradas y un bajo rendimiento. + + Al conceder permisos de modificación a otro Residente, le estás permitiendo cambiar, borrar o tomar CUALQUIER objeto que tengas en el mundo. Sé MUY cuidadoso al conceder este permiso. ¿Quieres conceder permisos de modificación a [NAME]? @@ -713,8 +717,9 @@ La calidad gráfica puede ajustarse en Preferencias > Gráficos. No tienes permiso para modificar el terreno de la parcela [PARCEL]. - No tienes permiso para copiar los elementos siguientes: -[ITEMS] y, si los das, los perderás del inventario. ¿Seguro que quieres ofrecerlos? + No tienes permiso para copiar los elementos siguientes: +<nolink>[ITEMS]</nolink> +y, si los das, los perderás del inventario. ¿Seguro que quieres ofrecerlos? @@ -3712,13 +3717,13 @@ no está en la misma región que tú. No puedes crear árboles y hierba en un terreno que no es tuyo. - Error al copiar: careces de permiso para copiar el objeto '[OBJ_NAME]'. + Error al copiar porque no tienes permiso para copiar el objeto <nolink>'[OBJ_NAME]'</nolink>. - Error al copiar: no se te puede transferir el objeto '[OBJ_NAME]'. + Error al copiar porque no puedes recibir una transferencia del objeto <nolink>'[OBJ_NAME]'</nolink>. - Error al copiar porque el objeto '[OBJ_NAME]' contribuye al navmesh. + Error al copiar porque el objeto <nolink>'[OBJ_NAME]'</nolink> contribuye a navmesh. Duplicación sin objetos raíz seleccionados. @@ -3763,34 +3768,34 @@ Prueba otra vez dentro de un minuto. Se ha deshabilitado Devolver el objeto a mi inventario. - No se puede guardar '[OBJ_NAME]' en el contenido del objeto porque el objeto desde el cual ha sido colocado ya no existe. + No se puede guardar <nolink>'[OBJ_NAME]'</nolink> en los contenidos del objeto porque el objeto a partir del cual fue creado ya no existe. - No se puede guardar '[OBJ_NAME]' en el contenido del objeto porque no tienes permiso para modificar el objeto '[DEST_NAME]'. + No se puede guardar <nolink>'[OBJ_NAME]'</nolink> en los contenidos del objeto porque no tienes permiso para modificar el objeto <nolink>'[DEST_NAME]'</nolink>. - No se puede guardar '[OBJ_NAME]' de nuevo en el inventario; esta operación está desactivada. + No se puede volver a guardar <nolink>'[OBJ_NAME]'</nolink> en el inventario. Esta operación fue desactivada. - No se puede copiar tu selección porque no tienes permiso para copiar el objeto '[OBJ_NAME]'. + No puedes copiar el elemento seleccionado porque no tienes permiso para copiar el objeto <nolink>'[OBJ_NAME]'</nolink>. - No se puede copiar tu selección porque el objeto '[OBJ_NAME]' es intransferible. + No puedes copiar el elemento seleccionado porque el objeto <nolink>'[OBJ_NAME]'</nolink> no es transferible. - No se puede copiar tu selección porque el objeto '[OBJ_NAME]' es intransferible. + No puedes copiar el elemento seleccionado porque el objeto <nolink>'[OBJ_NAME]'</nolink> no es transferible. - El sistema de permisos no admite la eliminación del objeto '[OBJ_NAME]' del simulador. + El sistema de permisos no autoriza quitar el objeto <nolink>'[OBJ_NAME]'</nolink> del simulador. - No se puede guardar tu selección porque no tienes permiso para modificar el objeto '[OBJ_NAME]'. + No puedes guardar el elemento seleccionado porque no tienes permiso para modificar el objeto <nolink>'[OBJ_NAME]'</nolink>. - No se puede guardar tu selección porque el objeto '[OBJ_NAME]' no se puede copiar. + No puedes guardar el elemento seleccionado porque el objeto <nolink>'[OBJ_NAME]'</nolink> no puede ser copiado. - No se puede aceptar tu selección porque no tienes permiso para modificar el objeto '[OBJ_NAME]'. + No puedes tomar el elemento seleccionado porque no tienes permiso para modificar el objeto <nolink>'[OBJ_NAME]'</nolink>. Error interno: tipo de destino desconocido. diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index 36a2711a5c..15e3c0622d 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -5651,4 +5651,25 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas La versión de la forma física no es correcta. Configura la versión correcta del modelo físico. + + Error de DNS al resolver el nombre del host([HOSTNAME]). +Por favor verifica si puedes conectarte al sitio web www.secondlife.com. +Si puedes conectarte, pero aún recibes este error, por favor accede a +la sección Soporte y genera un informe del problema. + + + El servidor de inicio de sesión no pudo verificarse vía SSL. +Si aún recibes este error, por favor accede a +la sección Soporte del sitio web Secondlife.com +y genera un informe del problema. + + + En general esto significa que el horario de tu computadora no está bien configurado. +Por favor accede al Panel de control y asegúrate de que la hora y la fecha estén +bien configurados. Verifica también que tu red y tu cortafuegos estén bien +configurados. Si aún recibes este error, por favor accede a la sección Soporte +del sitio web Secondlife.com y genera un informe del problema. + +[https://community.secondlife.com/knowledgebase/english/error-messages-r520/#Section__3 Base de conocimientos] + diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 74abecf760..9066f1e70c 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -244,6 +244,10 @@ Veuillez ne sélectionner qu'un seul objet. Remarque : si vous activez cette option, toutes les personnes utilisant cet ordinateur pourront voir votre liste d'endroits favoris. + + L'exécution de plusieurs visualiseurs Second Life n'est pas prise en charge. Cela peut entraîner des collisions de cache de texture, une corruption et une dégradation des visuels et des performances. + + Lorsque vous accordez des droits de modification à un autre résident, vous lui permettez de changer, supprimer ou prendre n'importe lequel de vos objets dans Second Life. Réfléchissez bien avant d'accorder ces droits. Voulez-vous vraiment accorder des droits de modification à [NAME] ? @@ -717,9 +721,9 @@ La qualité des graphiques peut être augmentée à la section Préférences > Vous n'êtes pas autorisé(e) à terraformer la parcelle [PARCEL]. - Vous n'êtes pas autorisé à copier les articles suivants : -[ITEMS]. -Ceux-ci disparaîtront donc de votre inventaire si vous les donnez. Voulez-vous vraiment offrir ces articles ? + Vous n'êtes pas autorisé à copier les objets suivants : +<nolink>[ITEMS]</nolink> +et il disparaîtra de votre inventaire si vous le donnez. Voulez-vous vraiment offrir ces articles ? @@ -3715,13 +3719,13 @@ il ne se trouve pas dans la même région que vous. Vous ne pouvez pas créer d'arbres ni d'herbe sur un terrain qui ne vous appartient pas. - Échec de la copie car vous ne disposez pas des droits requis pour copier l'objet [OBJ_NAME]. + La copie a échoué car vous ne disposez pas de l'autorisation nécessaire pour copier l'objet <nolink>'[OBJ_NAME]'</nolink>. - Échec de la copie car l'objet [OBJ_NAME] ne peut pas vous être transféré. + La copie a échoué car l'objet <nolink>'[OBJ_NAME]'</nolink> ne peut pas vous être transféré. - Échec de la copie car l'objet [OBJ_NAME] contribue au maillage de navigation. + La copie a échoué car l'objet <nolink>'[OBJ_NAME]'</nolink> contribue à navmesh. Dupliquer sans objet racine sélectionné @@ -3766,34 +3770,34 @@ Veuillez réessayer dans une minute. Le réenregistrement dans l'inventaire a été désactivé. - Impossible d'enregistrer [OBJ_NAME] dans le contenu des objets car l'objet à partir duquel il a été rezzé n'existe plus. + Impossible de sauvegarder <nolink>'[OBJ_NAME]'</nolink> dans le contenu de l'objet car l'objet à partir duquel il a été rezzé n'existe plus. - Impossible d'enregistrer [OBJ_NAME] dans le contenu des objets car vous ne disposez pas des droits requis pour modifier l'objet [DEST_NAME]. + Impossible de sauvegarder<nolink>'[OBJ_NAME]'</nolink> dans le contenu de l'objet car vous n'êtes pas autorisé à modifier l'objet <nolink>'[DEST_NAME]'</nolink>. - Impossible de réenregistrer [OBJ_NAME] dans l'inventaire -- cette opération a été désactivée. + Impossible de sauvegarder <nolink>'[OBJ_NAME]'</nolink> dans l'inventaire - cette opération a été désactivée. - Vous ne pouvez pas copier votre sélection car vous n'avez pas le droit de copier l'objet [OBJ_NAME]. + Vous ne pouvez pas copier votre sélection parce que vous n'êtes pas autorisé à copier l'objet <nolink>'[OBJ_NAME]'</nolink>. - Vous ne pouvez pas copier votre sélection car l'objet [OBJ_NAME] n'est pas transférable. + Vous ne pouvez pas copier votre sélection parce que l'objet <nolink>'[OBJ_NAME]'</nolink> n'est pas transférable. - Vous ne pouvez pas copier votre sélection car l'objet [OBJ_NAME] n'est pas transférable. + Vous ne pouvez pas copier votre sélection parce que l'objet <nolink>'[OBJ_NAME]'</nolink> n'est pas transférable. - La suppression de l'objet [OBJ_NAME] du simulateur n'est pas autorisée par le système de droits. + La suppression de l'objet <nolink>'[OBJ_NAME]'</nolink> du simulateur n'est pas autorisée par le système d'autorisations. - Vous ne pouvez pas enregistrer votre sélection car vous n'avez pas le droit de modifier l'objet [OBJ_NAME]. + Impossible de sauvegarder votre sélection parce que vous n'êtes pas autorisé à modifier l'objet <nolink>'[OBJ_NAME]'</nolink>. - Vous ne pouvez pas enregistrer votre sélection car l'objet [OBJ_NAME] ne peut pas être copié. + Impossible d'enregistrer votre sélection car l'objet <nolink>'[OBJ_NAME]'</nolink> n'est pas copiable. - Vous ne pouvez pas prendre votre sélection car vous n'avez pas le droit de modifier l'objet [OBJ_NAME]. + Vous ne pouvez pas sauvegarder votre sélection parce que vous n'êtes pas autorisé à modifier l'objet <nolink>'[OBJ_NAME]'</nolink>. Erreur interne : type de destination inconnue. diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index 7f5851b51d..13dd2b3640 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -5741,4 +5741,25 @@ Essayez avec le chemin d'accès à l'éditeur entre guillemets doubles La forme physique n’a pas la version correcte. Configurez la version correcte pour le modèle physique. + + DNS n'a pas pu résoudre le nom d'hôte([HOSTNAME]). +Veuillez vérifier que vous parvenez à vous connecter au site www.secondlife.com. +Si c'est le cas, et que vous continuez à recevoir ce message d'erreur, veuillez vous +rendre à la section Support et signaler ce problème + + + Le serveur d'identification a rencontré une erreur de connexion SSL. +Si vous continuez à recevoir ce message d'erreur, +veuillez vous rendre à la section Support du site web +SecondLife.com et signaler ce problème + + + Ceci est souvent dû à un mauvais réglage de l'horloge de votre ordinateur. +Veuillez aller à Tableaux de bord et assurez-vous que l'heure et la date sont réglés +correctement. Vérifiez également que votre réseau et votre pare-feu sont configurés +correctement. Si vous continuez à recevoir ce message d'erreur, veuillez vous rendre +à la section Support du site web SecondLife.com et signaler ce problème. + +[https://community.secondlife.com/knowledgebase/english/error-messages-r520/#Section__3 Base de connaissances] + diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index d1a47535d8..8a057914ac 100644 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -244,6 +244,10 @@ Scegli solo un oggetto e riprova. Nota: Se attivi questa opzione, chiunque usa questo computer può vedere l'elenco di luoghi preferiti. + + Non è possibile utilizzare più di un viewer Second Life contemporaneamente. L’utilizzo simultaneo potrebbe portare a collisioni o corruzione della cache texture, e ad un peggioramento nelle immagini e nella performance. + + Quando concedi i diritti di modifica ad un altro residente, gli permetti di modificare, eliminare o prendere QUALSIASI oggetto che possiedi in Second Life. Pertanto ti consigliamo di essere ben sicuro quando concedi questo diritto. Vuoi concedere i diritti di modifica a [NAME]? @@ -716,8 +720,8 @@ La qualità grafica può essere aumentata in Preferenze > Grafica. Non hai l'autorizzazione a copiare i seguenti oggetti: -[ITEMS] -e se li dai via, verranno eliminati dal tuo inventario. Sicuro di volere offrire questi oggetti? +<nolink>[ITEMS]</nolink> +e se li dai via, verranno eliminati dal tuo inventario. Sicuro di voler offrire questi oggetti? @@ -3719,13 +3723,13 @@ non è nella stessa regione in cui ti trovi. Non puoi creare alberi ed erba su terreni che non sono di tua proprietà. - Copia non riuscita perché non hai l'autorizzazione necessaria per copiare l'oggetto '[OBJ_NAME]'. + Copia non riuscita perché non hai il permesso per copiare l’oggetto <nolink>'[OBJ_NAME]'</nolink>. - La copia non è riuscita perché '[OBJ_NAME]' non può essere trasferito a te. + Copia non riuscita perché l’oggetto <nolink>'[OBJ_NAME]'</nolink> non può esserti trasferito. - La copia non è riuscita perché '[OBJ_NAME]' contribuisce al navmesh. + Copia non riuscita perché l’oggetto <nolink>'[OBJ_NAME]'</nolink> contribuisce al navmesh. Duplicato senza oggetto principale selezionato. @@ -3770,34 +3774,34 @@ Riprova tra un minuto. Opzione Salva nell'inventario disattivata - Impossibile salvare '[OBJ_NAME]' nei contenuti dell'oggetto perché l'oggetto da cui è stato razzato non esiste più. + Impossibile salvare <nolink>'[OBJ_NAME]'</nolink> in contenuti oggetto perché l’oggetto da cui è stato rezzato non esiste più. - Impossibile salvare '[OBJ_NAME]' nei contenuti dell'oggetto perché non hai l'autorizzazione necessaria per modificare l'oggetto '[DEST_NAME]'. + Impossibile salvare <nolink>'[OBJ_NAME]'</nolink> in contenuti oggetto perché non hai i permessi per modificare l’oggetto <nolink>'[DEST_NAME]’</nolink>. - Impossibile riportare '[OBJ_NAME]' nell'inventario -- questa operazione è stata disattivata. + Impossibile salvare <nolink>'[OBJ_NAME]'</nolink> nell’inventario: questa operazione è stata disabilitata. - Non puoi copiare l'elemento selezionato perché non hai l'autorizzazione necessaria per copiare l'oggetto '[OBJ_NAME]'. + Non puoi copiare la selezione perché non hai il permesso di copiare l’oggetto <nolink>'[OBJ_NAME]'</nolink>. - Non puoi copiare la selezione perché l'oggetto '[OBJ_NAME]' non può essere trasferito. + Non puoi copiare la selezione perché l’oggetto <nolink>'[OBJ_NAME]'</nolink> non è trasferibile. - Non puoi copiare la selezione perché l'oggetto '[OBJ_NAME]' non può essere trasferito. + Non puoi copiare la selezione perché l’oggetto <nolink>'[OBJ_NAME]'</nolink> non è trasferibile. - La rimozione dell'oggetto '[OBJ_NAME]' dal simulatore non è consentita dal sistema delle autorizzazioni. + La rimozione dell’oggetto <nolink>'[OBJ_NAME]'</nolink> dal simulatore è disattivata dal sistema dei permessi. - Non puoi salvare l'elemento selezionato perché non hai l'autorizzazione necessaria per modificare l'oggetto '[OBJ_NAME]'. + Non puoi copiare la selezione perché non hai il permesso di modificare l’oggetto <nolink>'[OBJ_NAME]'</nolink>. - Non puoi salvare la selezione perché l'oggetto '[OBJ_NAME]' non può essere copiato. + Non puoi copiare la selezione perché l’oggetto <nolink>'[OBJ_NAME]'</nolink> non è copiabile. - Non puoi prendere l'elemento selezionato perché non hai l'autorizzazione necessaria per modificare l'oggetto '[OBJ_NAME]'. + Non puoi prendere ciò che hai selezionato perché non hai il permesso di modificare l’oggetto <nolink>'[OBJ_NAME]'</nolink>. Errore interno: Tipo di destinazione sconosciuto. diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 918e655ab6..be3acc14b3 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -5656,4 +5656,25 @@ Prova a racchiudere il percorso dell'editor in doppie virgolette. La versione della forma fisica non è corretta. Imposta la versione corretta per il modello della fisica. + + Il DNS non ha potuto risolvere il nome dell’host([HOSTNAME]). +Verifica di riuscire a connetterti al sito web www.secondlife.com. +Se riesci ma continui a ricevere questo errore, visita la sezione +Assistenza e segnala il problema. + + + Il server per il login non ha potuto effettuare la verifica tramite SSL. +Se continui a ricevere questo errore, visita +la sezione Assistenza nel sito SecondLife.com +e segnala il problema. + + + Spesso l’errore è dovuto all’orologio del computer, impostato incorrettamente. +Vai al Pannello di Controllo e assicurati che data e ora siano +esatte. Controlla anche che il network e il firewall siano impostati +correttamente. Se continui a ricevere questo errore, visita la sezione +Assistenza nel sito SecondLife.com e segnala il problema. + +[https://community.secondlife.com/knowledgebase/english/error-messages-r520/#Section__3 Base conoscenze] + diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 99ba5b2655..fc6c951a55 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -244,6 +244,10 @@ 注意:このオプションを有効にすると、このパソコンを使うユーザーは誰でも、あなたのお気に入りの場所を見ることができるようになります。 + + 複数の Second Life ビューワを実行することはサポートされていません。テクスチャキャッシュのコリジョンや破損、およびビジュアルとパフォーマンスの低下につながる恐れがあります。 + + 他人に修正権限を与えると、権限を与えられた人はあなたが所有するインワールドのオブジェクトを変更、削除、持ち帰ることができます。この権限を与える際には十分に注意してください。 [NAME] に修正権限を与えますか? @@ -735,7 +739,9 @@ L$ が不足しているのでこのグループに参加することができ あなたには [PARCEL] 区画を地形編集する許可がありません。 - あなたには[ITEMS]というアイテムをコピーする許可がありません。他の住人に提供すると、そのアイテムはあなたのインベントリから削除されます。本当にこれらのアイテムを譲りますか? + あなたには次アイテムをコピーする権限がありません: +<nolink>[ITEMS]</nolink> +他の住人に譲ると、そのアイテムはあなたの持ち物から削除されます。本当にこれらのアイテムを譲りますか? @@ -3756,13 +3762,13 @@ M キーを押して変更します。 所有していない土地に木や草を植えることはできません。 - オブジェクト '[OBJ_NAME]' をコピーする権限がないため、コピーに失敗しました。 + あなたにはオブジェクト <nolink>'[OBJ_NAME]'</nolink> をコピーする権限がないため、コピーに失敗しました。 - オブジェクト '[OBJ_NAME]' をあなたに転送できないため、コピーに失敗しました。 + オブジェクト <nolink>'[OBJ_NAME]'</nolink> はあなたに譲渡できないため、コピーに失敗しました。 - オブジェクト '[OBJ_NAME]' がナビメッシュに貢献しているため、コピーに失敗しました。 + オブジェクト <nolink>'[OBJ_NAME]'</nolink> は navmesh に関連があるため、コピーに失敗しました。 ルートオブジェクトを選択せずに複製します。 @@ -3807,34 +3813,34 @@ M キーを押して変更します。 「「持ち物」に保存」が無効になっています。 - '[OBJ_NAME]' の Rez 元であるオブジェクトが存在しないため、このオブジェクトをオブジェクトコンテンツに保存できません。 + 「存在しません」から rez されたため、<nolink>'[OBJ_NAME]'</nolink> をオブジェクトの中身に保存できませんでした。 - オブジェクト '[DEST_NAME]' を修正する権限がないため、オブジェクトのコンテンツに '[OBJ_NAME]' を保存できません。 + あなたにはオブジェクト <nolink>'[DEST_NAME]'</nolink> を修正する権限がないため、<nolink>'[OBJ_NAME]'</nolink>をオブジェクトの中身に保存できませんでした。 - インベントリに '[OBJ_NAME]' を保存することはできません - この操作が無効になっています。 + <nolink>'[OBJ_NAME]'</nolink> をインベントリに保存できません。この操作は無効になりました。 - オブジェクト '[OBJ_NAME]' を変更する権限を持っていないため、選択したものをコピーできません。 + あなたにはオブジェクト <nolink>'[OBJ_NAME]'</nolink> をコピーする権限がないため、選択内容をコピーできません。 - オブジェクト '[OBJ_NAME]' を転送できないため、選択したものをコピーできません。 + オブジェクト <nolink>'[OBJ_NAME]'</nolink> を譲渡できないため、選択内容をコピーできません。 - オブジェクト '[OBJ_NAME]' を転送できないため、選択したものをコピーできません。 + オブジェクト <nolink>'[OBJ_NAME]'</nolink> を譲渡できないため、選択内容をコピーできません。 - シミュレータからのオブジェクト '[OBJ_NAME]' の削除は、権限システムによって無効にされています。 + オブジェクト <nolink>'[OBJ_NAME]'</nolink> をシミュレーターから削除することは、権限のシステムにより許可されていません。 - オブジェクト '[OBJ_NAME]' を変更する権限を持っていないため、選択したものを保存できません。 + あなたにはオブジェクト <nolink>'[OBJ_NAME]'</nolink> を修正する権限がないため、選択内容を保存できません。 - オブジェクト '[OBJ_NAME]' をコピーできないため、選択したものを保存できません。 + オブジェクト <nolink>'[OBJ_NAME]'</nolink> はコピー不可なため、選択内容を保存できません。 - オブジェクト '[OBJ_NAME]' を変更する権限を持っていないため、選択したものを取得できません。 + あなたにはオブジェクト <nolink>'[OBJ_NAME]'</nolink> を修正する権限がないため、選択内容を選ぶことはできません。 内部エラー: 不明な宛先タイプ。 diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index bcf4698bb0..9116bba8bb 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -5739,4 +5739,25 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ 物理形状のバージョンが正しくありません。物理モデルに正しいバージョンを設定してください。 + + DNS がホスト名 ([HOSTNAME]) を解決できませんでした。 +www.secondlife.com のウェブサイトに接続できるかご確認ください。 +接続できても、このエラーが継続的に起こる場合は、 +サポートセクションから問題を報告してください。 + + + ログインサーバーが SSL 経由で確認できませんでした。 +このエラーが継続的に起こる場合は、 +Secondlife.com のサポートセクションから +問題を報告してください。 + + + この問題の多くは、お使いのコンピュータの時計が正しく設定されていないために起こります。 +コントロールパネルから時刻と日付が正しく設定されているかご確認ください。 +お使いのネットワークとファイアウォールも正しく設定されているかお確かめください。 +このエラーが継続的に起こる場合は、Secondlife.com のサポートセクションから +問題を報告してください。 + +[https://community.secondlife.com/knowledgebase/english/error-messages-r520/#Section__3 ナレッジベース] + diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index 5c848034d8..b4cf0a1b20 100644 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -243,6 +243,10 @@ Por favor, selecione apenas um objeto e tente novamente. Nota: Ao ativar esta opção, qualquer pessoa que utilizar este computador poderá ver a sua lista de lugares preferidos. + + Não é possível executar múltiplos visualizadores Second Life. Pode levar a uma falha, um corrompimento, visuais alterados e falha no desempenho no cache de textura. + + Conceder direitos de modificação a outros residentes vai autorizá-los a mudar, apagar ou pegar TODOS os seus objetos. Seja MUITO cuidadoso ao conceder esta autorização. Deseja dar direitos de modificação a [NAME]? @@ -711,9 +715,9 @@ Para aumentar a qualidade do vídeo, vá para Preferências > Vídeo. Você não está autorizado a terraplanar o terreno [PARCEL]. - Você não tem autorização para copiar os itens abaixo: -[ITEMS] -ao dá-los, você ficará sem eles no seu inventário. Deseja realmente dar estes itens? + Não existe autorização para copiar os itens abaixo: +<nolink>[ITEMS]</nolink> +e eles sairão do inverntário se sair. Deseja realmente dar estes itens? @@ -3702,13 +3706,13 @@ ele não está na mesma região que você. Você não pode criar árvores e grama em terrenos que não são sua propriedade. - A cópia falhou porque você não está autorizado a copiar o objeto '[OBJ_NAME]'. + Falha na cópia por falta de permissão para copiar o objeto <nolink>'[OBJ_NAME]'</nolink>. - A cópia falhou porque o objeto '[OBJ_NAME]' não pode ser transferido para você. + Falha na cópia, porque o objeto <nolink>'[OBJ_NAME]'</nolink> não pode ser transferido para você. - A cópia falhou porque o objeto '[OBJ_NAME]' contribui para o navmesh. + Falha na cópia, porque o objeto <nolink>'[OBJ_NAME]'</nolink> contribui para o Navmesh. Duplicar sem objetos raiz selecionados. @@ -3753,34 +3757,34 @@ Tente novamente em instantes. Salvar no inventário foi desativado. - Não é possível salvar '[OBJ_NAME]' no conteúdo do objeto porque o objeto do qual ele foi renderizado não existe mais. + Não foi possível salvar <nolink>'[OBJ_NAME]'</nolink> para os conteúdos do objeto, porque o objeto foi utilizado e não existe mais. - Não é possível salvar '[OBJ_NAME]' no conteúdo do objeto porque você não tem permissão para modificar o objeto '[DEST_NAME]'. + Não foi possível salvar <nolink>'[OBJ_NAME]'</nolink> para os conteúdos do objeto, porque você não tem permissão para modificar o objeto <nolink>'[DEST_NAME]'</nolink>. - Não é possível salvar '[OBJ_NAME]' no inventário -- essa operação foi desativada. + Não é possível salvar <nolink>'[OBJ_NAME]'</nolink> no inventário outra vez -- esta operação foi desabilitada. - Você não pode copiar sua seleção porque não está autorizado a copiar o objeto '[OBJ_NAME]'. + Não é possível copiar a seleção porque você não tem permissão para copiar o objeto <nolink>'[OBJ_NAME]'</nolink>. - Você não pode copiar a seleção porque o objeto '[OBJ_NAME]' não é transferível. + Não é possível copiar a seleção porque o objeto <nolink>'[OBJ_NAME]'</nolink> não é transferível. - Você não pode copiar a seleção porque o objeto '[OBJ_NAME]' não é transferível. + Não é possível copiar a seleção porque o objeto <nolink>'[OBJ_NAME]'</nolink> não é transferível. - A remoção do objeto '[OBJ_NAME]' do simulador é proibida pelo sistema de permissões. + A remoção do objeto <nolink>'[OBJ_NAME]'</nolink> do simulador não é permitida pelo sistema de permissão. - Você não pode salvar sua seleção porque não está autorizado a modificar o objeto '[OBJ_NAME]'. + Não é possível salvar a seleção porque você não tem permissão para modificar o objeto <nolink>'[OBJ_NAME]'</nolink>. - Não é possível salvar sua seleção porque o objeto '[OBJ_NAME]' não é copiável. + Não é possível salvar a seleção porque o objeto <nolink>'[OBJ_NAME]'</nolink> não é copiável. - Você não pode levar sua seleção porque não está autorizado a modificar o objeto '[OBJ_NAME]'. + Não é possível realizar a seleção porque você não tem permissão para modificar o objeto <nolink>'[OBJ_NAME]'</nolink>. Erro interno: tipo de destino desconhecido. diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index ecf90ef787..4151ef36ac 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -5615,4 +5615,25 @@ Tente colocar o caminho do editor entre aspas. A forma física não tem a versão correta. Defina a versão correta para o modelo físico. + + O DNS não pode resolver o nome do host([HOSTNAME]). +Verifique se você pode conectar ao site www.secondlife.com . Se você +puder, mas se continuar recebendo esta mensagem de erro, vá à sessão +Suporte no site Secondlife.com e informe o problema. + + + O servidor de acesso não pôde verificá-lo pelo SSL. +Se você continuar recebendo esta mensagem de erro, +vá à sessão Suporte no site Secondlife.com +e informe o problema. + + + Geralmente, esse erro significa que o relógio do seu computador não está com o horário correto. +Vá em Painel de Controles e certifique-se de que a hora e data estejam corretos. +Além disso, verifique se a sua rede e firewall estejam corretos. Se você continuar +recebendo esta mensagem de erro, vá à sessão Suporte no site Secondlife.com +e informe o problema. + +[https://community.secondlife.com/knowledgebase/english/error-messages-r520/#Section__3 Base de conhecimento] + diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml index d752bf254e..d6866b6489 100644 --- a/indra/newview/skins/default/xui/ru/notifications.xml +++ b/indra/newview/skins/default/xui/ru/notifications.xml @@ -244,6 +244,10 @@ Примечание. После включения этой опции все пользователи данного компьютера смогут увидеть список ваших избранных мест. + + Запуск нескольких приложений Second Life Viewer не поддерживается. Это может привести к конфликтам кэша текстур, повреждению и снижению производительности и визуального отображения. + + Предоставление другому жителю прав на изменение позволит ему изменять, удалять или брать ЛЮБЫЕ ваши объекты. Будьте ОЧЕНЬ осторожны с предоставлением такого разрешения. Дать пользователю [NAME] права на изменение? @@ -717,9 +721,9 @@ Вам не разрешено терраформировать участок [PARCEL]. - У вас нет разрешения на копирование следующих предметов: -[ITEMS] -Если вы отдадите эти вещи, их больше не будет в вашем инвентаре. Вы действительно хотите предложить эти предметы? + У вас нет разрешения на копирование следующих предметов: +<nolink>[ITEMS]</nolink> +и они пропадут из вашего инвентаря, если вы их отдадите. Вы действительно хотите предложить эти предметы? @@ -3715,13 +3719,13 @@ Вы не можете создавать деревья и траву на чужой земле. - Не удалось скопировать: вам не разрешено копировать объект «[OBJ_NAME]». + Не удалось скопировать, потому что у вас нет разрешения на копирование этого предмета <nolink>'[OBJ_NAME]'</nolink>. - Не удалось скопировать: объект «[OBJ_NAME]» нельзя перенести к вам. + Не удалось скопировать, потому что предмет <nolink>'[OBJ_NAME]'</nolink> не может быть перемещён к вам. - Не удалось скопировать: объект «[OBJ_NAME]» относится к навигационной сетке. + Не удалось скопировать, потому что предмет <nolink>'[OBJ_NAME]'</nolink> относится к навигационной сетке. Выбран дубликат без корневых объектов. @@ -3766,34 +3770,34 @@ Сохранение в инвентаре отключено. - Нельзя сохранить «[OBJ_NAME]» в содержимом объекта: объект, из которого оно было выложено, уже не существует. + Не удалось сохранить <nolink>'[OBJ_NAME]'</nolink> в содержимом предмета, потому что место, в котором был создан предмет, больше не существует. - Нельзя сохранить «[OBJ_NAME]» в содержимом объекта: вам не разрешено изменять объект «[DEST_NAME]». + Не удалось сохранить <nolink>'[OBJ_NAME]'</nolink> в содержимом предмета, потому что у вас нет разрешения на модификацию предмета <nolink>'[DEST_NAME]'</nolink>. - Невозможно сохранить «[OBJ_NAME]» в инвентаре: эта операция запрещена. + Не удалось сохранить <nolink>'[OBJ_NAME]'</nolink> обратно в инвентаре – эта операция заблокирована. - Нельзя скопировать выбранное: вам не разрешено копировать объект «[OBJ_NAME]». + Вы не можете скопировать выбор, потому что у вас нет разрешения на копирование этого предмета <nolink>'[OBJ_NAME]'</nolink>. - Невозможно скопировать выбранный предмет: объект «[OBJ_NAME]» не переносится. + Вы не можете скопировать свой выбор, потому что предмет <nolink>'[OBJ_NAME]'</nolink> не может быть перемещён. - Невозможно скопировать выбранный предмет: объект «[OBJ_NAME]» не переносится. + Вы не можете скопировать свой выбор, потому что предмет <nolink>'[OBJ_NAME]'</nolink> не может быть перемещён. - Удаление объекта «[OBJ_NAME]» из симулятора запрещено системой разрешений. + Удаление предмета <nolink>'[OBJ_NAME]'</nolink> из симулятора не допущено системой прав доступа. - Нельзя сохранить выбранное: вам не разрешено изменять объект «[OBJ_NAME]». + Копирование выбора невозможно, потому что у вас нет разрешения на модифицирование этого предмета <nolink>'[OBJ_NAME]'</nolink>. - Невозможно сохранить выбранный предмет: объект «[OBJ_NAME]» не копируется. + Вы не можете сохранить свой выбор, потому что предмет <nolink>'[OBJ_NAME]'</nolink> не поддаётся копированию. - Нельзя забрать выбранное: вам не разрешено изменять объект «[OBJ_NAME]». + Вы не можете скопировать свой выбор, потому что у вас нет разрешения на модифицирование этого предмета <nolink>'[OBJ_NAME]'</nolink>. Внутренняя ошибка: неизвестный тип места назначения. diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml index 267c717189..dcc503f18c 100644 --- a/indra/newview/skins/default/xui/ru/strings.xml +++ b/indra/newview/skins/default/xui/ru/strings.xml @@ -5747,4 +5747,25 @@ support@secondlife.com. У физической формы нет правильной версии. Задайте правильную версию для физической модели. + + DNS не удалось разрешить имя узла([HOSTNAME]). +Проверьте возможность подключения к веб-сайту www.secondlife.com. +Если вы продолжаете получать эту ошибку, перейдите в раздел +поддержки и сообщите о проблеме. + + + Серверу входа в систему не удалось пройти аутентификацию с помощью +протокола SSL. Если вы продолжаете получать эту ошибку, +перейдите в раздел поддержки на веб-сайте SecondLife.com +и сообщите о проблеме. + + + Часто это означает, что часы компьютера установлены неправильно. +Перейдите, пожалуйста, на Панели управления и убедитесь в правильной +установке времени и даты. Также проверьте правильность настройки сети +и брандмауэра. Если вы продолжаете получать эту ошибку, перейдите в +раздел поддержки на веб-сайте SecondLife.com и сообщите о проблеме. + +[https://community.secondlife.com/knowledgebase/english/error-messages-r520/#Section__3 База знаний] + diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml index d72d89f1f5..fce5bbfcab 100644 --- a/indra/newview/skins/default/xui/tr/notifications.xml +++ b/indra/newview/skins/default/xui/tr/notifications.xml @@ -244,6 +244,10 @@ Lütfen sadece bir nesne seçin ve tekrar deneyin. Not: Bu seçeneği etkinleştirdiğinizde, bu bilgisayarı kullanan herkes en sevdiğiniz konumlar listenizi görebilecek. + + Birden çok Second Life görüntüleyiciyi çalıştırma özelliği desteklenmiyor. Bu durum doku önbelleği çakışmalarına, görsellerin bozulmasına ve performansın düşmesine yol açabilir. + + Başka bir Sakine değişiklik yapma hakkı verdiğinizde, SL dünyasında sahip olduğunuz HERHANGİ BİR nesneyi değiştirebilme, silebilme veya alabilmelerine izin vermiş olursunuz. Bu izni verirken ÇOK dikkatli olun. [NAME] adlı kişiye değişiklik yapma hakkı vermek istiyor musunuz? @@ -718,9 +722,9 @@ Grafik Kalitesi, Tercihler > Grafikler sekmesinden yükseltilebilir. [PARCEL] parseli üzerinde yer şekillendirmesi yapma izniniz bulunmuyor. - Aşağıdaki öğeleri kopyalamak için gerekli izne sahip değilsiniz: -[ITEMS] -Bu öğeleri verdiğiniz takdirde envanterinizden çıkacaklar. Bu öğeleri teklif etmeyi gerçekten istiyor musunuz? + Aşağıdaki öğeleri kopyalama izniniz yok: +<nolink>[ITEMS]</nolink> +ve bunları elden çıkardığınız takdirde envanterinizden kaybolacaktır. Bu öğeleri sunmayı gerçekten istiyor musunuz? @@ -3714,13 +3718,13 @@ Girişim iptal edildi. Sahibi olmadığınız arazide ağaçlar ve çimen oluşturamazsınız. - '[OBJ_NAME]' nesnesini kopyalama izniniz olmadığı için kopyalama başarılamadı. + <nolink>'[OBJ_NAME]'</nolink> nesnesini kopyalama izniniz olmadığından kopyalama başarısız oldu. - '[OBJ_NAME]' nesnesi size aktarılamadığı için kopyalama başarılamadı. + <nolink>'[OBJ_NAME]'</nolink> nesnesi size devredilemediğinden kopyalama başarısız oldu. - '[OBJ_NAME]' nesnesi navmesh'e katkıda bulunduğu için kopyalama başarılamadı. + <nolink>'[OBJ_NAME]'</nolink> nesnesi navigasyon örgüsüne katkıda bulunduğundan kopyalama başarısız oldu. Kök nesne seçili olmayan kopya. @@ -3765,34 +3769,34 @@ Lütfen bir dakika sonra tekrar deneyin. Envantere Geri Kaydet devre dışı bırakıldı. - '[OBJ_NAME]' nesne içeriğine kaydedilemedi, çünkü oluşturulurken temel alınan nesne artık mevcut değil. + Yeniden canlandırıldığı nesne artık mevcut olmadığından <nolink>'[OBJ_NAME]'</nolink> nesne içeriklerine kaydedilemiyor. - '[DEST_NAME]' nesnesini değiştirme izniniz olmadığı için '[OBJ_NAME]' nesne içeriğine kaydedilemedi. + <nolink>'[DEST_NAME]'</nolink> nesnesini değiştirme izniniz olmadığından <nolink>'[OBJ_NAME]'</nolink> nesne içeriklerine kaydedilemiyor. - '[OBJ_NAME]' envantere geri kaydedilemez -- bu işlem devre dışı bırakıldı. + <nolink>'[OBJ_NAME]'</nolink> envantere tekrar kaydedilemiyor -- bu işlem devre dışı bırakılmış. - '[OBJ_NAME]' nesnesini kopyalama izniniz olmadığı için seçiminizi kopyalamayazsınız. + <nolink>'[OBJ_NAME]'</nolink> nesnesini kopyalama izniniz olmadığından seçiminizi kopyalayamazsınız. - '[OBJ_NAME]' nesnesi aktarılamaz olduğu için seçiminizi kopyalayamazsınız. + <nolink>'[OBJ_NAME]'</nolink> nesnesi devredilebilir olmadığından seçiminizi kopyalayamazsınız. - '[OBJ_NAME]' nesnesi aktarılamaz olduğu için seçiminizi kopyalayamazsınız. + <nolink>'[OBJ_NAME]'</nolink> nesnesi devredilebilir olmadığından seçiminizi kopyalayamazsınız. - Benzeticiden '[OBJ_NAME]' nesnesinin kaldırılmasına izinler sistemi izin vermiyor. + <nolink>'[OBJ_NAME]'</nolink> nesnesinin simülatörden kaldırılmasına izin sistemi tarafından izin verilmiyor. - '[OBJ_NAME]' nesnesini değiştirme izniniz olmadığı için seçiminizi kaydedemezsiniz. + <nolink>'[OBJ_NAME]'</nolink> nesnesini değiştirme izniniz olmadığından seçiminiz kaydedilemiyor. - '[OBJ_NAME]' nesnesi kopyalanamaz olduğu için seçiminizi kaydedemezsiniz. + <nolink>'[OBJ_NAME]'</nolink> nesnesi kopyalanabilir olmadığından seçiminiz kaydedilemiyor. - '[OBJ_NAME]' nesnesini değiştirme izniniz olmadığı için seçiminizi alamazsınız. + <nolink>'[OBJ_NAME]'</nolink> nesnesini değiştirme izniniz olmadığından seçiminizi alamazsınız. Dahili Hata: Bilinmeyen hedef türü. diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml index b574420793..ea6f2115e4 100644 --- a/indra/newview/skins/default/xui/tr/strings.xml +++ b/indra/newview/skins/default/xui/tr/strings.xml @@ -5748,4 +5748,25 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin. Fiziksel şekil doğru sürüme sahip değil. Fiziksel model için doğru sürümü ayarlayın. + + DNS sunucusu ana bilgisayar adını çözümleyemedi ([HOSTNAME]). +Lütfen www.secondlife.com web sitesine bağlanabildiğinizi doğrulayın. +Bağlanabiliyor, ancak bu hatayı almaya devam ediyorsanız, lütfen +destek bölümüne gidin ve bu sorunu bildirin. + + + Oturum açma sunucusu SSL aracılığıyla kendini doğrulayamadı. +Bu hatayı almaya devam ederseniz, lütfen +SecondLife.com web sitesinin Destek +bölümüne gidin ve sorunu bildirin. + + + Çoğunlukla, bu durum, bilgisayarınızın saatinin yanlış ayarlandığı anlamına gelir. +Lütfen Denetim Masası'na gidin ve tarih ve saat ayarlarının doğru yapıldığından emin olun. +Ayrıca, ağınızın ve güvenlik duvarınızın doğru şekilde ayarlanıp ayarlanmadığını kontrol edin. +Bu hatayı almaya devam ederseniz, lütfen SecondLife.com web sitesinin Destek bölümüne +gidin ve sorunu bildirin. + +[https://community.secondlife.com/knowledgebase/english/error-messages-r520/#Section__3 Bilgi Bankası] + diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml index 9fe7b5acae..120ed1e7d2 100644 --- a/indra/newview/skins/default/xui/zh/notifications.xml +++ b/indra/newview/skins/default/xui/zh/notifications.xml @@ -244,6 +244,10 @@ 注意:你一旦同意這選項,任何使用這部電腦的人都可看到你有哪些「最愛」地點。 + + 不支援同時執行多個Second Life瀏覽器。 這麼做可能導致材質快取相互碰撞、毀損,並降低視覺效果及性能。 + + 賦予另一居民「修改」權,將允許他更改、刪除或拿取你在虛擬世界裡擁有的任何物件。 賦予這項權限時,敬請慎重考慮。 你仍要賦予 [NAME] 修改權嗎? @@ -719,7 +723,7 @@ 你沒有權限複製以下項目: -[ITEMS] +<nolink>[ITEMS]</nolink> 如果你將它送人,它將無法續留在收納區。 你確定要送出這些東西嗎? @@ -3714,13 +3718,13 @@ SHA1 指紋:[MD5_DIGEST] 你無法在別人的土地上建立樹和草。 - 複製失敗,你無權複製物件 '[OBJ_NAME]'。 + 複製失敗,你無權複製物件<nolink>'[OBJ_NAME]'</nolink>。 - 複製失敗,因為物件 '[OBJ_NAME]' 無法轉移給你。 + 複製失敗,因為物件<nolink>'[OBJ_NAME]'</nolink>無法轉移給你。 - 複製失敗,因為物件 '[OBJ_NAME]' 對導航網面有貢獻。 + 複製失敗,因為物件<nolink>'[OBJ_NAME]'</nolink>對導航網面有貢獻。 選取了沒有根的重覆物件。 @@ -3765,34 +3769,34 @@ SHA1 指紋:[MD5_DIGEST] 「儲存回收納區」功能已被停用。 - 無法將 '[OBJ_NAME]' 儲存到物件內容,因為產生它的來源物件已不存在。 + 無法將<nolink>'[OBJ_NAME]'</nolink>儲存到物件內容,因為產生它的來源物件已不存在。 - 無法儲存 [OBJ_NAME] 到物件內容,你無權修改 '[DEST_NAME]' 物件。 + 無法儲存<nolink>'[OBJ_NAME]'</nolink>到物件內容,因爲你無權修改<nolink>'[DEST_NAME]'</nolink>物件。 - 無法將 '[OBJ_NAME]' 儲存回收納區,此動作已被停用。 + 無法將<nolink>'[OBJ_NAME]'</nolink>儲存回收納區,此動作已被停用。 - 無法複製你所選的,因為你無權複製物件 '[OBJ_NAME]'。 + 無法複製你所選的,因為你無權複製物件<nolink>'[OBJ_NAME]'</nolink>。 - 無法選取複製,因為物件 '[OBJ_NAME]' 不可轉移。 + 無法選取複製,因為物件<nolink>'[OBJ_NAME]'</nolink>不可轉移。 - 無法選取複製,因為物件 '[OBJ_NAME]' 不可轉移。 + 無法選取複製,因為物件<nolink>'[OBJ_NAME]'</nolink>不可轉移。 - 權限系統不允許從模擬器移除物件 '[OBJ_NAME]'。 + 權限系統不允許從模擬器移除物件<nolink>'[OBJ_NAME]'</nolink>。 - 無法儲存你所選的,因為你無權修改 '[OBJ_NAME]' 物件。 + 無法儲存你所選的,因為你無權修改<nolink>'[OBJ_NAME]'</nolink>物件。 - 無法儲存你所選的,因為物件 '[OBJ_NAME]' 不可複製。 + 無法儲存你所選的,因為物件<nolink>'[OBJ_NAME]'</nolink>不可複製。 - 無法拿取你所選的,因為你無權修改 '[OBJ_NAME]' 物件。 + 無法取用你所選的,因為你無權修改物件<nolink>'[OBJ_NAME]'</nolink>。 內部錯誤:未知的目的地類型。 diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml index 24d8dc60cb..f8fd727145 100644 --- a/indra/newview/skins/default/xui/zh/strings.xml +++ b/indra/newview/skins/default/xui/zh/strings.xml @@ -5746,4 +5746,25 @@ http://secondlife.com/support 求助解決問題。 物理形狀的版本不正確。 請設成正確的物理模型版本。 + + DNS無法解決主機名稱([HOSTNAME])。 +請確認你能夠連通 www.secondlife.com +網站。 如能連通,但繼續看到這個錯誤, +請到「支援」部分通報問題。 + + + 登入伺服器無法透過SSL自我確認。 +如果你繼續看到這個錯誤,請前往 +SecondLife.com網站的「支援」部分 +提報問題。 + + + 這通常意味你電腦的時鐘設定不正確。 +請到控制台確定時間和日期設定正確。 +並檢查確定你的網路和防火牆設定正確。 +如果你繼續看到這個錯誤,請前往SecondLife.com +網站的「支援」部分提報問題。 + +[https://community.secondlife.com/knowledgebase/english/error-messages-r520/#Section__3 知識庫] + -- cgit v1.2.3 From aa1d4c0dc9e1923d3233256b03c414cf1e9205fb Mon Sep 17 00:00:00 2001 From: eli Date: Thu, 10 Jan 2019 16:53:31 -0800 Subject: FIX INTL-327 German misspellings --- .../newview/skins/default/xui/de/floater_pathfinding_console.xml | 2 +- .../newview/skins/default/xui/de/floater_pathfinding_linksets.xml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml index 27c6b73967..2422e414e0 100644 --- a/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml +++ b/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml @@ -96,7 +96,7 @@ - + diff --git a/indra/newview/skins/default/xui/de/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/de/floater_pathfinding_linksets.xml index a423f3efea..6729e242ac 100644 --- a/indra/newview/skins/default/xui/de/floater_pathfinding_linksets.xml +++ b/indra/newview/skins/default/xui/de/floater_pathfinding_linksets.xml @@ -61,10 +61,10 @@ Begehbar - Statisches Hinternis + Statisches Hindernis - Bewegliches Hinternis + Bewegliches Hindernis Materialvolumen @@ -103,8 +103,8 @@ - - + + -- cgit v1.2.3 From 9c8584a3a7562810c83dd5e2d02e42e6d6870d96 Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Fri, 11 Jan 2019 17:39:26 +0200 Subject: SL-10327 FIXED Scalable preview of mesh model is shown with black bar on top in the Upload Model menu --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llfloatermodelpreview.cpp | 19 +++++++++++++++++-- .../skins/default/xui/en/floater_model_preview.xml | 8 +++----- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 72301e7d14..82087fbe5d 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -8053,7 +8053,7 @@ PreviewRenderSize Comment - Resolution of the image rendered for the mesh upload preview + Resolution of the image rendered for the mesh upload preview (must be a power of 2) Persist 1 Type diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index c86eed2192..2cc42460a5 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -427,8 +427,23 @@ void LLFloaterModelPreview::initModelPreview() { delete mModelPreview; } - auto size = gSavedSettings.getS32("PreviewRenderSize"); - mModelPreview = new LLModelPreview(size, size, this ); + + S32 tex_width = 512; + S32 tex_height = 512; + + S32 max_width = llmin(gSavedSettings.getS32("PreviewRenderSize"), (S32)gPipeline.mScreenWidth); + S32 max_height = llmin(gSavedSettings.getS32("PreviewRenderSize"), (S32)gPipeline.mScreenHeight); + + while ((tex_width << 1) <= max_width) + { + tex_width <<= 1; + } + while ((tex_height << 1) <= max_height) + { + tex_height <<= 1; + } + + mModelPreview = new LLModelPreview(tex_width, tex_height, this); mModelPreview->setPreviewTarget(16.f); mModelPreview->setDetailsCallback(boost::bind(&LLFloaterModelPreview::setDetails, this, _1, _2, _3, _4, _5)); mModelPreview->setModelUpdatedCallback(boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this, _1)); diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml index a07fe99aef..274e6e6c7a 100644 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml @@ -1490,7 +1490,6 @@ Analysed: name="right_panel" top="0" left="640" - background_visible="true" width="375"> Preview Spread: @@ -1594,8 +1592,8 @@ Analysed: name="physics_explode" follows="right|bottom" valign="center" - top="15" - left="80" + left="105" + top_delta="-3" min_val="0.0" max_val="3.0" height="20" -- cgit v1.2.3 From 127ed9c67809b5ad169fbc971e800c7744363c57 Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Mon, 14 Jan 2019 13:50:28 +0200 Subject: SL-10352 FIXED 'Search menus' disappears after entering and exiting mouselook view --- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/llstatusbar.cpp | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 82087fbe5d..8f7c4601e8 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -11530,6 +11530,17 @@ Value 0 + MenuSearch + + Comment + Show/hide 'Search menus' field + Persist + 1 + Type + Boolean + Value + 1 + GroupListShowIcons Comment diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index b893e4a058..f3c270a97b 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -247,11 +247,11 @@ BOOL LLStatusBar::postBuild() mFilterEdit = getChild( "search_menu_edit" ); mSearchPanel = getChild( "menu_search_panel" ); - //mSearchPanel->setVisible(gSavedSettings.getBOOL("MenuSearch")); + mSearchPanel->setVisible(gSavedSettings.getBOOL("MenuSearch")); mFilterEdit->setKeystrokeCallback(boost::bind(&LLStatusBar::onUpdateFilterTerm, this)); mFilterEdit->setCommitCallback(boost::bind(&LLStatusBar::onUpdateFilterTerm, this)); collectSearchableItems(); - //gSavedSettings.getControl("MenuSearch")->getCommitSignal()->connect(boost::bind(&LLStatusBar::updateMenuSearchVisibility, this, _2)); + gSavedSettings.getControl("MenuSearch")->getCommitSignal()->connect(boost::bind(&LLStatusBar::updateMenuSearchVisibility, this, _2)); return TRUE; } -- cgit v1.2.3 From 26fae750ba753f32f58bd56d297f2d98c5759e50 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Mon, 14 Jan 2019 22:04:44 +0200 Subject: SL-10291 Replace apr_mutex with standard C++11 functionality --- doc/contributions.txt | 1 + indra/llcommon/llapr.cpp | 79 +------------ indra/llcommon/llapr.h | 57 ++-------- indra/llcommon/llerror.cpp | 148 ++++--------------------- indra/llcommon/llfixedbuffer.cpp | 2 +- indra/llcommon/llmutex.cpp | 130 +++++++++++++--------- indra/llcommon/llmutex.h | 85 +++++++++----- indra/llcommon/llthread.cpp | 6 +- indra/llcommon/lluuid.cpp | 2 +- indra/llcommon/llworkerthread.cpp | 4 +- indra/llcorehttp/httpcommon.cpp | 4 +- indra/llimage/llimage.cpp | 2 +- indra/llimage/llimageworker.cpp | 2 +- indra/llmath/llvolumemgr.cpp | 4 +- indra/llmessage/llbuffer.cpp | 2 +- indra/llmessage/llproxy.cpp | 2 +- indra/llplugin/llpluginmessagepipe.cpp | 4 +- indra/llplugin/llpluginprocessparent.cpp | 4 +- indra/llvfs/llvfs.cpp | 2 +- indra/newview/llappviewer.cpp | 2 +- indra/newview/lldirpicker.cpp | 2 +- indra/newview/llfloaterconversationpreview.cpp | 2 +- indra/newview/llfloatermodelpreview.cpp | 4 +- indra/newview/lllogchat.cpp | 6 +- indra/newview/llmeshrepository.cpp | 14 +-- indra/newview/lltexturecache.cpp | 8 +- indra/newview/lltexturefetch.cpp | 6 +- indra/newview/llviewermenufile.cpp | 2 +- indra/newview/llwatchdog.cpp | 4 +- 29 files changed, 221 insertions(+), 369 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 66323a38c6..6146689fb0 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1070,6 +1070,7 @@ Nicky Dasmijn STORM-2010 STORM-2082 MAINT-6665 + SL-10291 SL-10293 Nicky Perian OPEN-1 diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp index d353d06de2..29f0c7da9a 100644 --- a/indra/llcommon/llapr.cpp +++ b/indra/llcommon/llapr.cpp @@ -28,13 +28,12 @@ #include "linden_common.h" #include "llapr.h" +#include "llmutex.h" #include "apr_dso.h" #include "llthreadlocalstorage.h" apr_pool_t *gAPRPoolp = NULL; // Global APR memory pool LLVolatileAPRPool *LLAPRFile::sAPRFilePoolp = NULL ; //global volatile APR memory pool. -apr_thread_mutex_t *gLogMutexp = NULL; -apr_thread_mutex_t *gCallStacksLogMutexp = NULL; const S32 FULL_VOLATILE_APR_POOL = 1024 ; //number of references to LLVolatileAPRPool @@ -48,10 +47,6 @@ void ll_init_apr() if (!gAPRPoolp) { apr_pool_create(&gAPRPoolp, NULL); - - // Initialize the logging mutex - apr_thread_mutex_create(&gLogMutexp, APR_THREAD_MUTEX_UNNESTED, gAPRPoolp); - apr_thread_mutex_create(&gCallStacksLogMutexp, APR_THREAD_MUTEX_UNNESTED, gAPRPoolp); } if(!LLAPRFile::sAPRFilePoolp) @@ -75,23 +70,6 @@ void ll_cleanup_apr() LL_INFOS("APR") << "Cleaning up APR" << LL_ENDL; - if (gLogMutexp) - { - // Clean up the logging mutex - - // All other threads NEED to be done before we clean up APR, so this is okay. - apr_thread_mutex_destroy(gLogMutexp); - gLogMutexp = NULL; - } - if (gCallStacksLogMutexp) - { - // Clean up the logging mutex - - // All other threads NEED to be done before we clean up APR, so this is okay. - apr_thread_mutex_destroy(gCallStacksLogMutexp); - gCallStacksLogMutexp = NULL; - } - LLThreadLocalPointerBase::destroyAllThreadLocalStorage(); if (gAPRPoolp) @@ -168,26 +146,19 @@ apr_pool_t* LLAPRPool::getAPRPool() LLVolatileAPRPool::LLVolatileAPRPool(BOOL is_local, apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag) : LLAPRPool(parent, size, releasePoolFlag), mNumActiveRef(0), - mNumTotalRef(0), - mMutexPool(NULL), - mMutexp(NULL) + mNumTotalRef(0) { //create mutex if(!is_local) //not a local apr_pool, that is: shared by multiple threads. { - apr_pool_create(&mMutexPool, NULL); // Create a pool for mutex - apr_thread_mutex_create(&mMutexp, APR_THREAD_MUTEX_UNNESTED, mMutexPool); + mMutexp.reset(new std::mutex()); } } LLVolatileAPRPool::~LLVolatileAPRPool() { //delete mutex - if(mMutexp) - { - apr_thread_mutex_destroy(mMutexp); - apr_pool_destroy(mMutexPool); - } + mMutexp.reset(); } // @@ -201,7 +172,7 @@ apr_pool_t* LLVolatileAPRPool::getAPRPool() apr_pool_t* LLVolatileAPRPool::getVolatileAPRPool() { - LLScopedLock lock(mMutexp) ; + LLScopedLock lock(mMutexp.get()) ; mNumTotalRef++ ; mNumActiveRef++ ; @@ -216,7 +187,7 @@ apr_pool_t* LLVolatileAPRPool::getVolatileAPRPool() void LLVolatileAPRPool::clearVolatileAPRPool() { - LLScopedLock lock(mMutexp) ; + LLScopedLock lock(mMutexp.get()); if(mNumActiveRef > 0) { @@ -250,44 +221,6 @@ BOOL LLVolatileAPRPool::isFull() { return mNumTotalRef > FULL_VOLATILE_APR_POOL ; } -//--------------------------------------------------------------------- -// -// LLScopedLock -// -LLScopedLock::LLScopedLock(apr_thread_mutex_t* mutex) : mMutex(mutex) -{ - if(mutex) - { - if(ll_apr_warn_status(apr_thread_mutex_lock(mMutex))) - { - mLocked = false; - } - else - { - mLocked = true; - } - } - else - { - mLocked = false; - } -} - -LLScopedLock::~LLScopedLock() -{ - unlock(); -} - -void LLScopedLock::unlock() -{ - if(mLocked) - { - if(!ll_apr_warn_status(apr_thread_mutex_unlock(mMutex))) - { - mLocked = false; - } - } -} //--------------------------------------------------------------------- diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h index 1ac5c4e9b2..73d1d180ef 100644 --- a/indra/llcommon/llapr.h +++ b/indra/llcommon/llapr.h @@ -36,15 +36,23 @@ #include #include "llwin32headerslean.h" #include "apr_thread_proc.h" -#include "apr_thread_mutex.h" #include "apr_getopt.h" #include "apr_signal.h" #include "apr_atomic.h" #include "llstring.h" -extern LL_COMMON_API apr_thread_mutex_t* gLogMutexp; -extern apr_thread_mutex_t* gCallStacksLogMutexp; +#if LL_WINDOWS +#pragma warning (push) +#pragma warning (disable:4265) +#endif +// warning C4265: 'std::_Pad' : class has virtual functions, but destructor is not virtual + +#include + +#if LL_WINDOWS +#pragma warning (pop) +#endif struct apr_dso_handle_t; /** @@ -120,50 +128,9 @@ private: S32 mNumActiveRef ; //number of active pointers pointing to the apr_pool. S32 mNumTotalRef ; //number of total pointers pointing to the apr_pool since last creating. - apr_thread_mutex_t *mMutexp; - apr_pool_t *mMutexPool; + std::unique_ptr mMutexp; } ; -/** - * @class LLScopedLock - * @brief Small class to help lock and unlock mutexes. - * - * This class is used to have a stack level lock once you already have - * an apr mutex handy. The constructor handles the lock, and the - * destructor handles the unlock. Instances of this class are - * not thread safe. - */ -class LL_COMMON_API LLScopedLock : private boost::noncopyable -{ -public: - /** - * @brief Constructor which accepts a mutex, and locks it. - * - * @param mutex An allocated APR mutex. If you pass in NULL, - * this wrapper will not lock. - */ - LLScopedLock(apr_thread_mutex_t* mutex); - - /** - * @brief Destructor which unlocks the mutex if still locked. - */ - ~LLScopedLock(); - - /** - * @brief Check lock. - */ - bool isLocked() const { return mLocked; } - - /** - * @brief This method unlocks the mutex. - */ - void unlock(); - -protected: - bool mLocked; - apr_thread_mutex_t* mMutex; -}; - template class LLAtomic32 { public: diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index 17d8164289..3db6705985 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -1096,6 +1096,9 @@ namespace } namespace { + LLMutex gLogMutex; + LLMutex gCallStacksLogMutex; + bool checkLevelMap(const LevelMap& map, const std::string& key, LLError::ELevel& level) { @@ -1135,56 +1138,6 @@ namespace { } return found_level; } - - class LogLock - { - public: - LogLock(); - ~LogLock(); - bool ok() const { return mOK; } - private: - bool mLocked; - bool mOK; - }; - - LogLock::LogLock() - : mLocked(false), mOK(false) - { - if (!gLogMutexp) - { - mOK = true; - return; - } - - const int MAX_RETRIES = 5; - for (int attempts = 0; attempts < MAX_RETRIES; ++attempts) - { - apr_status_t s = apr_thread_mutex_trylock(gLogMutexp); - if (!APR_STATUS_IS_EBUSY(s)) - { - mLocked = true; - mOK = true; - return; - } - - ms_sleep(1); - //apr_thread_yield(); - // Just yielding won't necessarily work, I had problems with - // this on Linux - doug 12/02/04 - } - - // We're hosed, we can't get the mutex. Blah. - std::cerr << "LogLock::LogLock: failed to get mutex for log" - << std::endl; - } - - LogLock::~LogLock() - { - if (mLocked) - { - apr_thread_mutex_unlock(gLogMutexp); - } - } } namespace LLError @@ -1192,8 +1145,8 @@ namespace LLError bool Log::shouldLog(CallSite& site) { - LogLock lock; - if (!lock.ok()) + LLMutexTrylock lock(&gLogMutex, 5); + if (!lock.isLocked()) { return false; } @@ -1243,11 +1196,11 @@ namespace LLError std::ostringstream* Log::out() { - LogLock lock; + LLMutexTrylock lock(&gLogMutex,5); // If we hit a logging request very late during shutdown processing, // when either of the relevant LLSingletons has already been deleted, // DO NOT resurrect them. - if (lock.ok() && ! (Settings::wasDeleted() || Globals::wasDeleted())) + if (lock.isLocked() && ! (Settings::wasDeleted() || Globals::wasDeleted())) { Globals* g = Globals::getInstance(); @@ -1263,8 +1216,8 @@ namespace LLError void Log::flush(std::ostringstream* out, char* message) { - LogLock lock; - if (!lock.ok()) + LLMutexTrylock lock(&gLogMutex,5); + if (!lock.isLocked()) { return; } @@ -1303,8 +1256,8 @@ namespace LLError void Log::flush(std::ostringstream* out, const CallSite& site) { - LogLock lock; - if (!lock.ok()) + LLMutexTrylock lock(&gLogMutex,5); + if (!lock.isLocked()) { return; } @@ -1469,69 +1422,6 @@ namespace LLError char** LLCallStacks::sBuffer = NULL ; S32 LLCallStacks::sIndex = 0 ; -#define SINGLE_THREADED 1 - - class CallStacksLogLock - { - public: - CallStacksLogLock(); - ~CallStacksLogLock(); - -#if SINGLE_THREADED - bool ok() const { return true; } -#else - bool ok() const { return mOK; } - private: - bool mLocked; - bool mOK; -#endif - }; - -#if SINGLE_THREADED - CallStacksLogLock::CallStacksLogLock() - { - } - CallStacksLogLock::~CallStacksLogLock() - { - } -#else - CallStacksLogLock::CallStacksLogLock() - : mLocked(false), mOK(false) - { - if (!gCallStacksLogMutexp) - { - mOK = true; - return; - } - - const int MAX_RETRIES = 5; - for (int attempts = 0; attempts < MAX_RETRIES; ++attempts) - { - apr_status_t s = apr_thread_mutex_trylock(gCallStacksLogMutexp); - if (!APR_STATUS_IS_EBUSY(s)) - { - mLocked = true; - mOK = true; - return; - } - - ms_sleep(1); - } - - // We're hosed, we can't get the mutex. Blah. - std::cerr << "CallStacksLogLock::CallStacksLogLock: failed to get mutex for log" - << std::endl; - } - - CallStacksLogLock::~CallStacksLogLock() - { - if (mLocked) - { - apr_thread_mutex_unlock(gCallStacksLogMutexp); - } - } -#endif - //static void LLCallStacks::allocateStackBuffer() { @@ -1560,8 +1450,8 @@ namespace LLError //static void LLCallStacks::push(const char* function, const int line) { - CallStacksLogLock lock; - if (!lock.ok()) + LLMutexTrylock lock(&gCallStacksLogMutex, 5); + if (!lock.isLocked()) { return; } @@ -1595,8 +1485,8 @@ namespace LLError //static void LLCallStacks::end(std::ostringstream* _out) { - CallStacksLogLock lock; - if (!lock.ok()) + LLMutexTrylock lock(&gCallStacksLogMutex, 5); + if (!lock.isLocked()) { return; } @@ -1617,8 +1507,8 @@ namespace LLError //static void LLCallStacks::print() { - CallStacksLogLock lock; - if (!lock.ok()) + LLMutexTrylock lock(&gCallStacksLogMutex, 5); + if (!lock.isLocked()) { return; } @@ -1655,8 +1545,8 @@ namespace LLError bool debugLoggingEnabled(const std::string& tag) { - LogLock lock; - if (!lock.ok()) + LLMutexTrylock lock(&gLogMutex, 5); + if (!lock.isLocked()) { return false; } diff --git a/indra/llcommon/llfixedbuffer.cpp b/indra/llcommon/llfixedbuffer.cpp index d394f179fb..bd4db8be84 100644 --- a/indra/llcommon/llfixedbuffer.cpp +++ b/indra/llcommon/llfixedbuffer.cpp @@ -31,7 +31,7 @@ LLFixedBuffer::LLFixedBuffer(const U32 max_lines) : LLLineBuffer(), mMaxLines(max_lines), - mMutex(NULL) + mMutex() { mTimer.reset(); } diff --git a/indra/llcommon/llmutex.cpp b/indra/llcommon/llmutex.cpp index 9c13ef9e30..cf84e50953 100644 --- a/indra/llcommon/llmutex.cpp +++ b/indra/llcommon/llmutex.cpp @@ -30,41 +30,19 @@ #include "llmutex.h" #include "llthread.h" +#include "lltimer.h" //============================================================================ -LLMutex::LLMutex(apr_pool_t *poolp) : - mAPRMutexp(NULL), mCount(0), mLockingThread(NO_THREAD) +LLMutex::LLMutex() : + mCount(0), + mLockingThread(NO_THREAD) { - //if (poolp) - //{ - // mIsLocalPool = FALSE; - // mAPRPoolp = poolp; - //} - //else - { - mIsLocalPool = TRUE; - apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread - } - apr_thread_mutex_create(&mAPRMutexp, APR_THREAD_MUTEX_UNNESTED, mAPRPoolp); } LLMutex::~LLMutex() { -#if MUTEX_DEBUG - //bad assertion, the subclass LLSignal might be "locked", and that's OK - //llassert_always(!isLocked()); // better not be locked! -#endif - if (ll_apr_is_initialized()) - { - apr_thread_mutex_destroy(mAPRMutexp); - if (mIsLocalPool) - { - apr_pool_destroy(mAPRPoolp); - } - } - mAPRMutexp = NULL; } @@ -76,7 +54,7 @@ void LLMutex::lock() return; } - apr_thread_mutex_lock(mAPRMutexp); + mMutex.lock(); #if MUTEX_DEBUG // Have to have the lock before we can access the debug info @@ -106,19 +84,18 @@ void LLMutex::unlock() #endif mLockingThread = NO_THREAD; - apr_thread_mutex_unlock(mAPRMutexp); + mMutex.unlock(); } bool LLMutex::isLocked() { - apr_status_t status = apr_thread_mutex_trylock(mAPRMutexp); - if (APR_STATUS_IS_EBUSY(status)) + if (!mMutex.try_lock()) { return true; } else { - apr_thread_mutex_unlock(mAPRMutexp); + mMutex.unlock(); return false; } } @@ -141,8 +118,7 @@ bool LLMutex::trylock() return true; } - apr_status_t status(apr_thread_mutex_trylock(mAPRMutexp)); - if (APR_STATUS_IS_EBUSY(status)) + if (!mMutex.try_lock()) { return false; } @@ -161,45 +137,95 @@ bool LLMutex::trylock() //============================================================================ -LLCondition::LLCondition(apr_pool_t *poolp) : - LLMutex(poolp) +LLCondition::LLCondition() : + LLMutex() { - // base class (LLMutex) has already ensured that mAPRPoolp is set up. - - apr_thread_cond_create(&mAPRCondp, mAPRPoolp); } LLCondition::~LLCondition() { - apr_thread_cond_destroy(mAPRCondp); - mAPRCondp = NULL; } void LLCondition::wait() { - if (!isLocked()) - { //mAPRMutexp MUST be locked before calling apr_thread_cond_wait - apr_thread_mutex_lock(mAPRMutexp); -#if MUTEX_DEBUG - // avoid asserts on destruction in non-release builds - U32 id = LLThread::currentID(); - mIsLocked[id] = TRUE; -#endif - } - apr_thread_cond_wait(mAPRCondp, mAPRMutexp); + std::unique_lock< std::mutex > lock(mMutex); + mCond.wait(lock); } void LLCondition::signal() { - apr_thread_cond_signal(mAPRCondp); + mCond.notify_one(); } void LLCondition::broadcast() { - apr_thread_cond_broadcast(mAPRCondp); + mCond.notify_all(); } + +LLMutexTrylock::LLMutexTrylock(LLMutex* mutex) + : mMutex(mutex), + mLocked(false) +{ + if (mMutex) + mLocked = mMutex->trylock(); +} + +LLMutexTrylock::LLMutexTrylock(LLMutex* mutex, U32 aTries, U32 delay_ms) + : mMutex(mutex), + mLocked(false) +{ + if (!mMutex) + return; + + for (U32 i = 0; i < aTries; ++i) + { + mLocked = mMutex->trylock(); + if (mLocked) + break; + ms_sleep(delay_ms); + } +} + +LLMutexTrylock::~LLMutexTrylock() +{ + if (mMutex && mLocked) + mMutex->unlock(); +} + + +//--------------------------------------------------------------------- +// +// LLScopedLock +// +LLScopedLock::LLScopedLock(std::mutex* mutex) : mMutex(mutex) +{ + if(mutex) + { + mutex->lock(); + mLocked = true; + } + else + { + mLocked = false; + } +} + +LLScopedLock::~LLScopedLock() +{ + unlock(); +} + +void LLScopedLock::unlock() +{ + if(mLocked) + { + mMutex->unlock(); + mLocked = false; + } +} + //============================================================================ diff --git a/indra/llcommon/llmutex.h b/indra/llcommon/llmutex.h index ea535cee86..f841d7f950 100644 --- a/indra/llcommon/llmutex.h +++ b/indra/llcommon/llmutex.h @@ -28,6 +28,19 @@ #define LL_LLMUTEX_H #include "stdtypes.h" +#include + +#if LL_WINDOWS +#pragma warning (push) +#pragma warning (disable:4265) +#endif +// 'std::_Pad' : class has virtual functions, but destructor is not virtual +#include +#include + +#if LL_WINDOWS +#pragma warning (pop) +#endif //============================================================================ @@ -37,10 +50,6 @@ #include #endif -struct apr_thread_mutex_t; -struct apr_pool_t; -struct apr_thread_cond_t; - class LL_COMMON_API LLMutex { public: @@ -49,7 +58,7 @@ public: NO_THREAD = 0xFFFFFFFF } e_locking_thread; - LLMutex(apr_pool_t *apr_poolp = NULL); // NULL pool constructs a new pool for the mutex + LLMutex(); virtual ~LLMutex(); void lock(); // blocks @@ -60,13 +69,10 @@ public: U32 lockingThread() const; //get ID of locking thread protected: - apr_thread_mutex_t *mAPRMutexp; + std::mutex mMutex; mutable U32 mCount; mutable U32 mLockingThread; - apr_pool_t *mAPRPoolp; - BOOL mIsLocalPool; - #if MUTEX_DEBUG std::map mIsLocked; #endif @@ -76,7 +82,7 @@ protected: class LL_COMMON_API LLCondition : public LLMutex { public: - LLCondition(apr_pool_t* apr_poolp); // Defaults to global pool, could use the thread pool as well. + LLCondition(); ~LLCondition(); void wait(); // blocks @@ -84,7 +90,7 @@ public: void broadcast(); protected: - apr_thread_cond_t* mAPRCondp; + std::condition_variable mCond; }; class LLMutexLock @@ -119,19 +125,9 @@ private: class LLMutexTrylock { public: - LLMutexTrylock(LLMutex* mutex) - : mMutex(mutex), - mLocked(false) - { - if (mMutex) - mLocked = mMutex->trylock(); - } - - ~LLMutexTrylock() - { - if (mMutex && mLocked) - mMutex->unlock(); - } + LLMutexTrylock(LLMutex* mutex); + LLMutexTrylock(LLMutex* mutex, U32 aTries, U32 delay_ms = 10); + ~LLMutexTrylock(); bool isLocked() const { @@ -142,4 +138,43 @@ private: LLMutex* mMutex; bool mLocked; }; -#endif // LL_LLTHREAD_H + +/** +* @class LLScopedLock +* @brief Small class to help lock and unlock mutexes. +* +* The constructor handles the lock, and the destructor handles +* the unlock. Instances of this class are not thread safe. +*/ +class LL_COMMON_API LLScopedLock : private boost::noncopyable +{ +public: + /** + * @brief Constructor which accepts a mutex, and locks it. + * + * @param mutex An allocated mutex. If you pass in NULL, + * this wrapper will not lock. + */ + LLScopedLock(std::mutex* mutex); + + /** + * @brief Destructor which unlocks the mutex if still locked. + */ + ~LLScopedLock(); + + /** + * @brief Check lock. + */ + bool isLocked() const { return mLocked; } + + /** + * @brief This method unlocks the mutex. + */ + void unlock(); + +protected: + bool mLocked; + std::mutex* mMutex; +}; + +#endif // LL_LLMUTEX_H diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index f066e9a4cd..860415bb22 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -186,8 +186,8 @@ LLThread::LLThread(const std::string& name, apr_pool_t *poolp) : mIsLocalPool = TRUE; apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread } - mRunCondition = new LLCondition(mAPRPoolp); - mDataLock = new LLMutex(mAPRPoolp); + mRunCondition = new LLCondition(); + mDataLock = new LLMutex(); mLocalAPRFilePoolp = NULL ; } @@ -413,7 +413,7 @@ void LLThreadSafeRefCount::initThreadSafeRefCount() { if (!sMutex) { - sMutex = new LLMutex(0); + sMutex = new LLMutex(); } } diff --git a/indra/llcommon/lluuid.cpp b/indra/llcommon/lluuid.cpp index d4af2c6b01..8f33d789eb 100644 --- a/indra/llcommon/lluuid.cpp +++ b/indra/llcommon/lluuid.cpp @@ -738,7 +738,7 @@ void LLUUID::getCurrentTime(uuid_time_t *timestamp) getSystemTime(&time_last); uuids_this_tick = uuids_per_tick; init = TRUE; - mMutex = new LLMutex(NULL); + mMutex = new LLMutex(); } uuid_time_t time_now = {0,0}; diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp index 4c197dc1d6..4b91b2caca 100644 --- a/indra/llcommon/llworkerthread.cpp +++ b/indra/llcommon/llworkerthread.cpp @@ -37,7 +37,7 @@ LLWorkerThread::LLWorkerThread(const std::string& name, bool threaded, bool should_pause) : LLQueuedThread(name, threaded, should_pause) { - mDeleteMutex = new LLMutex(NULL); + mDeleteMutex = new LLMutex(); if(!mLocalAPRFilePoolp) { @@ -204,7 +204,7 @@ LLWorkerClass::LLWorkerClass(LLWorkerThread* workerthread, const std::string& na mWorkerClassName(name), mRequestHandle(LLWorkerThread::nullHandle()), mRequestPriority(LLWorkerThread::PRIORITY_NORMAL), - mMutex(NULL), + mMutex(), mWorkFlags(0) { if (!mWorkerThread) diff --git a/indra/llcorehttp/httpcommon.cpp b/indra/llcorehttp/httpcommon.cpp index 1829062af6..7c93c54cdf 100644 --- a/indra/llcorehttp/httpcommon.cpp +++ b/indra/llcorehttp/httpcommon.cpp @@ -333,7 +333,7 @@ LLMutex *getCurlMutex() if (!sHandleMutexp) { - sHandleMutexp = new LLMutex(NULL); + sHandleMutexp = new LLMutex(); } return sHandleMutexp; @@ -389,7 +389,7 @@ void initialize() S32 mutex_count = CRYPTO_num_locks(); for (S32 i = 0; i < mutex_count; i++) { - sSSLMutex.push_back(LLMutex_ptr(new LLMutex(NULL))); + sSSLMutex.push_back(LLMutex_ptr(new LLMutex())); } CRYPTO_set_id_callback(&ssl_thread_id); CRYPTO_set_locking_callback(&ssl_locking_callback); diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index 1a4dd2ca99..680fbf548f 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -594,7 +594,7 @@ void LLImage::initClass(bool use_new_byte_range, S32 minimal_reverse_byte_range_ { sUseNewByteRange = use_new_byte_range; sMinimalReverseByteRangePercent = minimal_reverse_byte_range_percent; - sMutex = new LLMutex(NULL); + sMutex = new LLMutex(); } //static diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp index 4875fe7001..5f42fba866 100644 --- a/indra/llimage/llimageworker.cpp +++ b/indra/llimage/llimageworker.cpp @@ -35,7 +35,7 @@ LLImageDecodeThread::LLImageDecodeThread(bool threaded) : LLQueuedThread("imagedecode", threaded) { - mCreationMutex = new LLMutex(getAPRPool()); + mCreationMutex = new LLMutex(); } //virtual diff --git a/indra/llmath/llvolumemgr.cpp b/indra/llmath/llvolumemgr.cpp index 3b8f08e0c6..89cdb1c6b9 100644 --- a/indra/llmath/llvolumemgr.cpp +++ b/indra/llmath/llvolumemgr.cpp @@ -48,7 +48,7 @@ LLVolumeMgr::LLVolumeMgr() { // the LLMutex magic interferes with easy unit testing, // so you now must manually call useMutex() to use it - //mDataMutex = new LLMutex(gAPRPoolp); + //mDataMutex = new LLMutex(); } LLVolumeMgr::~LLVolumeMgr() @@ -214,7 +214,7 @@ void LLVolumeMgr::useMutex() { if (!mDataMutex) { - mDataMutex = new LLMutex(gAPRPoolp); + mDataMutex = new LLMutex(); } } diff --git a/indra/llmessage/llbuffer.cpp b/indra/llmessage/llbuffer.cpp index d07d9980c3..1a0eceba0f 100644 --- a/indra/llmessage/llbuffer.cpp +++ b/indra/llmessage/llbuffer.cpp @@ -265,7 +265,7 @@ void LLBufferArray::setThreaded(bool threaded) { if(!mMutexp) { - mMutexp = new LLMutex(NULL); + mMutexp = new LLMutex(); } } else diff --git a/indra/llmessage/llproxy.cpp b/indra/llmessage/llproxy.cpp index 537efa69d8..5730a36267 100644 --- a/indra/llmessage/llproxy.cpp +++ b/indra/llmessage/llproxy.cpp @@ -48,7 +48,7 @@ static void tcp_close_channel(LLSocket::ptr_t* handle_ptr); // Close an open TCP LLProxy::LLProxy(): mHTTPProxyEnabled(false), - mProxyMutex(NULL), + mProxyMutex(), mUDPProxy(), mTCPProxy(), mHTTPProxy(), diff --git a/indra/llplugin/llpluginmessagepipe.cpp b/indra/llplugin/llpluginmessagepipe.cpp index 9468696507..9766e1bfed 100644 --- a/indra/llplugin/llpluginmessagepipe.cpp +++ b/indra/llplugin/llpluginmessagepipe.cpp @@ -92,8 +92,8 @@ void LLPluginMessagePipeOwner::killMessagePipe(void) } LLPluginMessagePipe::LLPluginMessagePipe(LLPluginMessagePipeOwner *owner, LLSocket::ptr_t socket): - mInputMutex(gAPRPoolp), - mOutputMutex(gAPRPoolp), + mInputMutex(), + mOutputMutex(), mOutputStartIndex(0), mOwner(owner), mSocket(socket) diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp index 0a8e58ac90..eb6cb1b503 100644 --- a/indra/llplugin/llpluginprocessparent.cpp +++ b/indra/llplugin/llpluginprocessparent.cpp @@ -80,11 +80,11 @@ protected: }; LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner): - mIncomingQueueMutex(gAPRPoolp) + mIncomingQueueMutex() { if(!sInstancesMutex) { - sInstancesMutex = new LLMutex(gAPRPoolp); + sInstancesMutex = new LLMutex(); } mOwner = owner; diff --git a/indra/llvfs/llvfs.cpp b/indra/llvfs/llvfs.cpp index d5bd1834c2..617056d94d 100644 --- a/indra/llvfs/llvfs.cpp +++ b/indra/llvfs/llvfs.cpp @@ -234,7 +234,7 @@ LLVFS::LLVFS(const std::string& index_filename, const std::string& data_filename mDataFP(NULL), mIndexFP(NULL) { - mDataMutex = new LLMutex(0); + mDataMutex = new LLMutex(); S32 i; for (i = 0; i < VFSLOCK_COUNT; i++) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 7c79cc7ddf..f8fa06b527 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2148,7 +2148,7 @@ bool LLAppViewer::initThreads() if (LLTrace::BlockTimer::sLog || LLTrace::BlockTimer::sMetricLog) { - LLTrace::BlockTimer::setLogLock(new LLMutex(NULL)); + LLTrace::BlockTimer::setLogLock(new LLMutex()); mFastTimerLogThread = new LLFastTimerLogThread(LLTrace::BlockTimer::sLogName); mFastTimerLogThread->start(); } diff --git a/indra/newview/lldirpicker.cpp b/indra/newview/lldirpicker.cpp index 5443afe60c..b8e6e81ee6 100644 --- a/indra/newview/lldirpicker.cpp +++ b/indra/newview/lldirpicker.cpp @@ -315,7 +315,7 @@ void LLDirPickerThread::run() //static void LLDirPickerThread::initClass() { - sMutex = new LLMutex(NULL); + sMutex = new LLMutex(); } //static diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp index b48ecc8f31..66198b3bf6 100644 --- a/indra/newview/llfloaterconversationpreview.cpp +++ b/indra/newview/llfloaterconversationpreview.cpp @@ -46,7 +46,7 @@ LLFloaterConversationPreview::LLFloaterConversationPreview(const LLSD& session_i mPageSize(gSavedSettings.getS32("ConversationHistoryPageSize")), mAccountName(session_id[LL_FCP_ACCOUNT_NAME]), mCompleteName(session_id[LL_FCP_COMPLETE_NAME]), - mMutex(NULL), + mMutex(), mShowHistory(false), mMessages(NULL), mHistoryThreadsBusy(false), diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 2cc42460a5..616bee84fd 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -266,7 +266,7 @@ mCalculateBtn(NULL) sInstance = this; mLastMouseX = 0; mLastMouseY = 0; - mStatusLock = new LLMutex(NULL); + mStatusLock = new LLMutex(); mModelPreview = NULL; mLODMode[LLModel::LOD_HIGH] = 0; @@ -1265,7 +1265,7 @@ void LLFloaterModelPreview::onMouseCaptureLostModelPreview(LLMouseHandler* handl //----------------------------------------------------------------------------- LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp) -: LLViewerDynamicTexture(width, height, 3, ORDER_MIDDLE, FALSE), LLMutex(NULL) +: LLViewerDynamicTexture(width, height, 3, ORDER_MIDDLE, FALSE), LLMutex() , mLodsQuery() , mLodsWithParsingError() , mPelvisZOffset( 0.0f ) diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index c535fc1cdf..c9889667b4 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -516,7 +516,7 @@ LLMutex* LLLogChat::historyThreadsMutex() { if (sHistoryThreadsMutex == NULL) { - sHistoryThreadsMutex = new LLMutex(NULL); + sHistoryThreadsMutex = new LLMutex(); } return sHistoryThreadsMutex; } @@ -1012,8 +1012,8 @@ void LLDeleteHistoryThread::run() LLActionThread::LLActionThread(const std::string& name) : LLThread(name), - mMutex(NULL), - mRunCondition(NULL), + mMutex(), + mRunCondition(), mFinished(false) { } diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index f32dad7f55..a6002bd57f 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -830,9 +830,9 @@ LLMeshRepoThread::LLMeshRepoThread() { LLAppCoreHttp & app_core_http(LLAppViewer::instance()->getAppCoreHttp()); - mMutex = new LLMutex(NULL); - mHeaderMutex = new LLMutex(NULL); - mSignal = new LLCondition(NULL); + mMutex = new LLMutex(); + mHeaderMutex = new LLMutex(); + mSignal = new LLCondition(); mHttpRequest = new LLCore::HttpRequest; mHttpOptions = LLCore::HttpOptions::ptr_t(new LLCore::HttpOptions); mHttpOptions->setTransferTimeout(SMALL_MESH_XFER_TIMEOUT); @@ -2039,7 +2039,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data, mUploadSkin = upload_skin; mUploadJoints = upload_joints; mLockScaleIfJointPosition = lock_scale_if_joint_position; - mMutex = new LLMutex(NULL); + mMutex = new LLMutex(); mPendingUploads = 0; mFinished = false; mOrigin = gAgent.getPositionAgent(); @@ -3446,7 +3446,7 @@ LLMeshRepository::LLMeshRepository() void LLMeshRepository::init() { - mMeshMutex = new LLMutex(NULL); + mMeshMutex = new LLMutex(); LLConvexDecomposition::getInstance()->initSystem(); @@ -4588,8 +4588,8 @@ LLPhysicsDecomp::LLPhysicsDecomp() mQuitting = false; mDone = false; - mSignal = new LLCondition(NULL); - mMutex = new LLMutex(NULL); + mSignal = new LLCondition(); + mMutex = new LLMutex(); } LLPhysicsDecomp::~LLPhysicsDecomp() diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index eb4b914e18..e5af47ab6c 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -825,10 +825,10 @@ void LLTextureCacheWorker::endWork(S32 param, bool aborted) LLTextureCache::LLTextureCache(bool threaded) : LLWorkerThread("TextureCache", threaded), - mWorkersMutex(NULL), - mHeaderMutex(NULL), - mListMutex(NULL), - mFastCacheMutex(NULL), + mWorkersMutex(), + mHeaderMutex(), + mListMutex(), + mFastCacheMutex(), mHeaderAPRFile(NULL), mReadOnly(TRUE), //do not allow to change the texture cache until setReadOnly() is called. mTexturesSizeTotal(0), diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 1f69939c46..ca401f5c17 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -925,7 +925,7 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher, mCanUseHTTP(true), mRetryAttempt(0), mActiveCount(0), - mWorkMutex(NULL), + mWorkMutex(), mFirstPacket(0), mLastPacket(-1), mTotalPackets(0), @@ -2543,8 +2543,8 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image mDebugPause(FALSE), mPacketCount(0), mBadPacketCount(0), - mQueueMutex(getAPRPool()), - mNetworkQueueMutex(getAPRPool()), + mQueueMutex(), + mNetworkQueueMutex(), mTextureCache(cache), mImageDecodeThread(imagedecodethread), mTextureBandwidth(0), diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index d2a5578568..a9a91b158b 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -175,7 +175,7 @@ void LLFilePickerThread::run() //static void LLFilePickerThread::initClass() { - sMutex = new LLMutex(NULL); + sMutex = new LLMutex(); } //static diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp index 2782cd9545..dd6c77ca7d 100644 --- a/indra/newview/llwatchdog.cpp +++ b/indra/newview/llwatchdog.cpp @@ -155,7 +155,7 @@ void LLWatchdogTimeout::ping(const std::string& state) // LLWatchdog LLWatchdog::LLWatchdog() : - mSuspectsAccessMutex(NULL), + mSuspectsAccessMutex(), mTimer(NULL), mLastClockCount(0), mKillerCallback(&default_killer_callback) @@ -185,7 +185,7 @@ void LLWatchdog::init(killer_event_callback func) mKillerCallback = func; if(!mSuspectsAccessMutex && !mTimer) { - mSuspectsAccessMutex = new LLMutex(NULL); + mSuspectsAccessMutex = new LLMutex(); mTimer = new LLWatchdogTimerThread(); mTimer->setSleepTime(WATCHDOG_SLEEP_TIME_USEC / 1000); mLastClockCount = LLTimer::getTotalTime(); -- cgit v1.2.3 From 346fc435f1b12e47b8bf51d15c70ceca4615de41 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Thu, 17 Jan 2019 01:53:27 +0200 Subject: SL-10291 cleanup-mutex --- indra/llcommon/llrefcount.cpp | 109 ----------------------------------------- indra/llcommon/llrefcount.h | 18 +------ indra/llmessage/llpumpio.cpp | 54 -------------------- indra/llmessage/llpumpio.h | 11 ----- indra/llvfs/lllfsthread.h | 1 - indra/llvfs/llvfsthread.h | 2 - indra/newview/lltexturefetch.h | 1 - 7 files changed, 1 insertion(+), 195 deletions(-) diff --git a/indra/llcommon/llrefcount.cpp b/indra/llcommon/llrefcount.cpp index a638df2c7c..29a5ca6f24 100644 --- a/indra/llcommon/llrefcount.cpp +++ b/indra/llcommon/llrefcount.cpp @@ -29,25 +29,9 @@ #include "llerror.h" -#if LL_REF_COUNT_DEBUG -#include "llthread.h" -#include "llapr.h" -#endif - LLRefCount::LLRefCount(const LLRefCount& other) : mRef(0) { -#if LL_REF_COUNT_DEBUG - if(gAPRPoolp) - { - mMutexp = new LLMutex(gAPRPoolp) ; - } - else - { - mMutexp = NULL ; - } - mCrashAtUnlock = FALSE ; -#endif } LLRefCount& LLRefCount::operator=(const LLRefCount&) @@ -59,17 +43,6 @@ LLRefCount& LLRefCount::operator=(const LLRefCount&) LLRefCount::LLRefCount() : mRef(0) { -#if LL_REF_COUNT_DEBUG - if(gAPRPoolp) - { - mMutexp = new LLMutex(gAPRPoolp) ; - } - else - { - mMutexp = NULL ; - } - mCrashAtUnlock = FALSE ; -#endif } LLRefCount::~LLRefCount() @@ -78,87 +51,5 @@ LLRefCount::~LLRefCount() { LL_ERRS() << "deleting non-zero reference" << LL_ENDL; } - -#if LL_REF_COUNT_DEBUG - if(gAPRPoolp) - { - delete mMutexp ; - } -#endif } -#if LL_REF_COUNT_DEBUG -void LLRefCount::ref() const -{ - if(mMutexp) - { - if(mMutexp->isLocked()) - { - mCrashAtUnlock = TRUE ; - LL_ERRS() << "the mutex is locked by the thread: " << mLockedThreadID - << " Current thread: " << LLThread::currentID() << LL_ENDL ; - } - - mMutexp->lock() ; - mLockedThreadID = LLThread::currentID() ; - - mRef++; - - if(mCrashAtUnlock) - { - while(1); //crash here. - } - mMutexp->unlock() ; - } - else - { - mRef++; - } -} - -S32 LLRefCount::unref() const -{ - if(mMutexp) - { - if(mMutexp->isLocked()) - { - mCrashAtUnlock = TRUE ; - LL_ERRS() << "the mutex is locked by the thread: " << mLockedThreadID - << " Current thread: " << LLThread::currentID() << LL_ENDL ; - } - - mMutexp->lock() ; - mLockedThreadID = LLThread::currentID() ; - - llassert(mRef >= 1); - if (0 == --mRef) - { - if(mCrashAtUnlock) - { - while(1); //crash here. - } - mMutexp->unlock() ; - - delete this; - return 0; - } - - if(mCrashAtUnlock) - { - while(1); //crash here. - } - mMutexp->unlock() ; - return mRef; - } - else - { - llassert(mRef >= 1); - if (0 == --mRef) - { - delete this; - return 0; - } - return mRef; - } -} -#endif diff --git a/indra/llcommon/llrefcount.h b/indra/llcommon/llrefcount.h index 1107973569..cdc60fa54f 100644 --- a/indra/llcommon/llrefcount.h +++ b/indra/llcommon/llrefcount.h @@ -31,11 +31,6 @@ #include "llmutex.h" #include "llapr.h" -#define LL_REF_COUNT_DEBUG 0 -#if LL_REF_COUNT_DEBUG -class LLMutex ; -#endif - //---------------------------------------------------------------------------- // RefCount objects should generally only be accessed by way of LLPointer<>'s // see llthread.h for LLThreadSafeRefCount @@ -51,10 +46,6 @@ protected: public: LLRefCount(); -#if LL_REF_COUNT_DEBUG - void ref() const ; - S32 unref() const ; -#else inline void ref() const { mRef++; @@ -69,8 +60,7 @@ public: return 0; } return mRef; - } -#endif + } //NOTE: when passing around a const LLRefCount object, this can return different results // at different types, since mRef is mutable @@ -81,12 +71,6 @@ public: private: mutable S32 mRef; - -#if LL_REF_COUNT_DEBUG - LLMutex* mMutexp ; - mutable U32 mLockedThreadID ; - mutable BOOL mCrashAtUnlock ; -#endif }; diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp index 506ccc98a4..a2524e9804 100644 --- a/indra/llmessage/llpumpio.cpp +++ b/indra/llmessage/llpumpio.cpp @@ -54,11 +54,7 @@ // constants for poll timeout. if we are threading, we want to have a // longer poll timeout. -#if LL_THREADS_APR -static const S32 DEFAULT_POLL_TIMEOUT = 1000; -#else static const S32 DEFAULT_POLL_TIMEOUT = 0; -#endif // The default (and fallback) expiration time for chains const F32 DEFAULT_CHAIN_EXPIRY_SECS = 30.0f; @@ -169,8 +165,6 @@ LLPumpIO::LLPumpIO(apr_pool_t* pool) : mPool(NULL), mCurrentPool(NULL), mCurrentPoolReallocCount(0), - mChainsMutex(NULL), - mCallbackMutex(NULL), mCurrentChain(mRunningChains.end()) { mCurrentChain = mRunningChains.end(); @@ -194,9 +188,6 @@ bool LLPumpIO::addChain(const chain_t& chain, F32 timeout, bool has_curl_request { if(chain.empty()) return false; -#if LL_THREADS_APR - LLScopedLock lock(mChainsMutex); -#endif LLChainInfo info; info.mHasCurlRequest = has_curl_request; info.setTimeoutSeconds(timeout); @@ -234,9 +225,6 @@ bool LLPumpIO::addChain( if(!data) return false; if(links.empty()) return false; -#if LL_THREADS_APR - LLScopedLock lock(mChainsMutex); -#endif #if LL_DEBUG_PIPE_TYPE_IN_PUMP LL_DEBUGS() << "LLPumpIO::addChain() " << links[0].mPipe << " '" << typeid(*(links[0].mPipe)).name() << "'" << LL_ENDL; @@ -391,9 +379,6 @@ void LLPumpIO::clearLock(S32 key) // therefore won't be treading into deleted memory. I think we can // also clear the lock on the chain safely since the pump only // reads that value. -#if LL_THREADS_APR - LLScopedLock lock(mChainsMutex); -#endif mClearLocks.insert(key); } @@ -457,9 +442,6 @@ void LLPumpIO::pump(const S32& poll_timeout) PUMP_DEBUG; if(true) { -#if LL_THREADS_APR - LLScopedLock lock(mChainsMutex); -#endif // bail if this pump is paused. if(PAUSING == mState) { @@ -724,25 +706,10 @@ void LLPumpIO::pump(const S32& poll_timeout) END_PUMP_DEBUG; } -//bool LLPumpIO::respond(const chain_t& pipes) -//{ -//#if LL_THREADS_APR -// LLScopedLock lock(mCallbackMutex); -//#endif -// LLChainInfo info; -// links_t links; -// -// mPendingCallbacks.push_back(info); -// return true; -//} - bool LLPumpIO::respond(LLIOPipe* pipe) { if(NULL == pipe) return false; -#if LL_THREADS_APR - LLScopedLock lock(mCallbackMutex); -#endif LLChainInfo info; LLLinkInfo link; link.mPipe = pipe; @@ -761,10 +728,6 @@ bool LLPumpIO::respond( if(!data) return false; if(links.empty()) return false; -#if LL_THREADS_APR - LLScopedLock lock(mCallbackMutex); -#endif - // Add the callback response LLChainInfo info; info.mChainLinks = links; @@ -781,9 +744,6 @@ void LLPumpIO::callback() //LL_INFOS() << "LLPumpIO::callback()" << LL_ENDL; if(true) { -#if LL_THREADS_APR - LLScopedLock lock(mCallbackMutex); -#endif std::copy( mPendingCallbacks.begin(), mPendingCallbacks.end(), @@ -809,9 +769,6 @@ void LLPumpIO::callback() void LLPumpIO::control(LLPumpIO::EControl op) { -#if LL_THREADS_APR - LLScopedLock lock(mChainsMutex); -#endif switch(op) { case PAUSE: @@ -829,22 +786,11 @@ void LLPumpIO::control(LLPumpIO::EControl op) void LLPumpIO::initialize(apr_pool_t* pool) { if(!pool) return; -#if LL_THREADS_APR - // SJB: Windows defaults to NESTED and OSX defaults to UNNESTED, so use UNNESTED explicitly. - apr_thread_mutex_create(&mChainsMutex, APR_THREAD_MUTEX_UNNESTED, pool); - apr_thread_mutex_create(&mCallbackMutex, APR_THREAD_MUTEX_UNNESTED, pool); -#endif mPool = pool; } void LLPumpIO::cleanup() { -#if LL_THREADS_APR - if(mChainsMutex) apr_thread_mutex_destroy(mChainsMutex); - if(mCallbackMutex) apr_thread_mutex_destroy(mCallbackMutex); -#endif - mChainsMutex = NULL; - mCallbackMutex = NULL; if(mPollset) { // LL_DEBUGS() << "cleaning up pollset" << LL_ENDL; diff --git a/indra/llmessage/llpumpio.h b/indra/llmessage/llpumpio.h index d2c5d37571..b9eabee710 100644 --- a/indra/llmessage/llpumpio.h +++ b/indra/llmessage/llpumpio.h @@ -40,9 +40,6 @@ #include "lliopipe.h" #include "llrun.h" -// Define this to enable use with the APR thread library. -//#define LL_THREADS_APR 1 - // some simple constants to help with timeouts extern const F32 DEFAULT_CHAIN_EXPIRY_SECS; extern const F32 SHORT_CHAIN_EXPIRY_SECS; @@ -393,14 +390,6 @@ protected: apr_pool_t* mCurrentPool; S32 mCurrentPoolReallocCount; -#if LL_THREADS_APR - apr_thread_mutex_t* mChainsMutex; - apr_thread_mutex_t* mCallbackMutex; -#else - int* mChainsMutex; - int* mCallbackMutex; -#endif - protected: void initialize(apr_pool_t* pool); void cleanup(); diff --git a/indra/llvfs/lllfsthread.h b/indra/llvfs/lllfsthread.h index cdb5c75946..58f658f7ba 100644 --- a/indra/llvfs/lllfsthread.h +++ b/indra/llvfs/lllfsthread.h @@ -32,7 +32,6 @@ #include #include -#include "llapr.h" #include "llpointer.h" #include "llqueuedthread.h" diff --git a/indra/llvfs/llvfsthread.h b/indra/llvfs/llvfsthread.h index 95f3c857c6..7814de4a2d 100644 --- a/indra/llvfs/llvfsthread.h +++ b/indra/llvfs/llvfsthread.h @@ -32,8 +32,6 @@ #include #include -#include "llapr.h" - #include "llqueuedthread.h" #include "llvfs.h" diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h index cfa312ccd9..19369137b7 100644 --- a/indra/newview/lltexturefetch.h +++ b/indra/newview/lltexturefetch.h @@ -35,7 +35,6 @@ #include "lluuid.h" #include "llworkerthread.h" #include "lltextureinfo.h" -#include "llapr.h" #include "llimageworker.h" #include "httprequest.h" #include "httpoptions.h" -- cgit v1.2.3 From fa15830e02ed249186625e845e2ac19749d10193 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 15 Jan 2019 18:31:17 +0200 Subject: SL-10291 Replace apr_atomic with standard C++11 functionality --- indra/llcommon/CMakeLists.txt | 2 ++ indra/llcommon/llapp.h | 3 +- indra/llcommon/llapr.h | 28 --------------- indra/llcommon/llatomic.cpp | 28 +++++++++++++++ indra/llcommon/llatomic.h | 69 ++++++++++++++++++++++++++++++++++++ indra/llcommon/llinstancetracker.cpp | 7 ++-- indra/llcommon/llinstancetracker.h | 9 +++-- indra/llcommon/llmutex.cpp | 3 -- indra/llcommon/llqueuedthread.h | 6 ++-- indra/llcommon/llrefcount.h | 8 ++--- indra/llcommon/llworkerthread.h | 2 +- indra/llcorehttp/_httpservice.h | 2 +- indra/llcorehttp/_refcounted.h | 2 +- indra/llcorehttp/_thread.h | 1 + indra/llcrashlogger/llcrashlock.cpp | 1 + indra/llmessage/llproxy.h | 2 +- indra/llvfs/llpidlock.cpp | 1 + indra/newview/llappviewer.h | 1 + indra/newview/llmeshrepository.cpp | 3 +- indra/newview/lltexturecache.h | 2 +- 20 files changed, 128 insertions(+), 52 deletions(-) create mode 100644 indra/llcommon/llatomic.cpp create mode 100644 indra/llcommon/llatomic.h diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index d9eb13d65a..ac19e6d025 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -35,6 +35,7 @@ set(llcommon_SOURCE_FILES llapp.cpp llapr.cpp llassettype.cpp + llatomic.cpp llbase32.cpp llbase64.cpp llbitpack.cpp @@ -135,6 +136,7 @@ set(llcommon_HEADER_FILES llapp.h llapr.h llassettype.h + llatomic.h llbase32.h llbase64.h llbitpack.h diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h index acd829d864..245c73e3a2 100644 --- a/indra/llcommon/llapp.h +++ b/indra/llcommon/llapp.h @@ -30,9 +30,8 @@ #include #include "llrun.h" #include "llsd.h" +#include // Forward declarations -template class LLAtomic32; -typedef LLAtomic32 LLAtomicU32; class LLErrorThread; class LLLiveFile; #if LL_LINUX diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h index 73d1d180ef..da50dda103 100644 --- a/indra/llcommon/llapr.h +++ b/indra/llcommon/llapr.h @@ -38,7 +38,6 @@ #include "apr_thread_proc.h" #include "apr_getopt.h" #include "apr_signal.h" -#include "apr_atomic.h" #include "llstring.h" @@ -131,33 +130,6 @@ private: std::unique_ptr mMutexp; } ; -template class LLAtomic32 -{ -public: - LLAtomic32() {}; - LLAtomic32(Type x) {apr_atomic_set32(&mData, apr_uint32_t(x)); }; - ~LLAtomic32() {}; - - operator const Type() { apr_uint32_t data = apr_atomic_read32(&mData); return Type(data); } - - Type CurrentValue() const { apr_uint32_t data = apr_atomic_read32(const_cast< volatile apr_uint32_t* >(&mData)); return Type(data); } - - Type operator =(const Type& x) { apr_atomic_set32(&mData, apr_uint32_t(x)); return Type(mData); } - void operator -=(Type x) { apr_atomic_sub32(&mData, apr_uint32_t(x)); } - void operator +=(Type x) { apr_atomic_add32(&mData, apr_uint32_t(x)); } - Type operator ++(int) { return apr_atomic_inc32(&mData); } // Type++ - Type operator --(int) { return apr_atomic_dec32(&mData); } // approximately --Type (0 if final is 0, non-zero otherwise) - - Type operator ++() { return apr_atomic_inc32(&mData); } // Type++ - Type operator --() { return apr_atomic_dec32(&mData); } // approximately --Type (0 if final is 0, non-zero otherwise) - -private: - volatile apr_uint32_t mData; -}; - -typedef LLAtomic32 LLAtomicU32; -typedef LLAtomic32 LLAtomicS32; - // File IO convenience functions. // Returns NULL if the file fails to open, sets *sizep to file size if not NULL // abbreviated flags diff --git a/indra/llcommon/llatomic.cpp b/indra/llcommon/llatomic.cpp new file mode 100644 index 0000000000..93aba1f460 --- /dev/null +++ b/indra/llcommon/llatomic.cpp @@ -0,0 +1,28 @@ +/** + * @file llatomic.cpp + * + * $LicenseInfo:firstyear=2018&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2018, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llatomic.h" + +//============================================================================ diff --git a/indra/llcommon/llatomic.h b/indra/llcommon/llatomic.h new file mode 100644 index 0000000000..8de773846c --- /dev/null +++ b/indra/llcommon/llatomic.h @@ -0,0 +1,69 @@ +/** + * @file llatomic.h + * @brief Base classes for atomic. + * + * $LicenseInfo:firstyear=2018&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2018, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLATOMIC_H +#define LL_LLATOMIC_H + +#include "stdtypes.h" + +#include + +template > class LLAtomicBase +{ +public: + LLAtomicBase() {}; + LLAtomicBase(Type x) { mData.store(x); } + ~LLAtomicBase() {}; + + operator const Type() { return mData; } + + Type CurrentValue() const { return mData; } + + Type operator =(const Type& x) { mData.store(x); return mData; } + void operator -=(Type x) { mData -= x; } + void operator +=(Type x) { mData += x; } + Type operator ++(int) { return mData++; } + Type operator --(int) { return mData--; } + + Type operator ++() { return ++mData; } + Type operator --() { return --mData; } + +private: + AtomicType mData; +}; + +// Typedefs for specialized versions. Using std::atomic_(u)int32_t to get the optimzed implementation. +#ifdef LL_WINDOWS +typedef LLAtomicBase LLAtomicU32; +typedef LLAtomicBase LLAtomicS32; +#else +typedef LLAtomicBase LLAtomicU32; +typedef LLAtomicBase LLAtomicS32; +#endif + +typedef LLAtomicBase LLAtomicBool; + +#endif // LL_LLATOMIC_H diff --git a/indra/llcommon/llinstancetracker.cpp b/indra/llcommon/llinstancetracker.cpp index 11fc53f8c8..3f990f4869 100644 --- a/indra/llcommon/llinstancetracker.cpp +++ b/indra/llcommon/llinstancetracker.cpp @@ -36,17 +36,16 @@ void LLInstanceTrackerBase::StaticBase::incrementDepth() { - apr_atomic_inc32(&sIterationNestDepth); + ++sIterationNestDepth; } void LLInstanceTrackerBase::StaticBase::decrementDepth() { llassert(sIterationNestDepth); - apr_atomic_dec32(&sIterationNestDepth); + --sIterationNestDepth; } U32 LLInstanceTrackerBase::StaticBase::getDepth() { - apr_uint32_t data = apr_atomic_read32(&sIterationNestDepth); - return data; + return sIterationNestDepth; } diff --git a/indra/llcommon/llinstancetracker.h b/indra/llcommon/llinstancetracker.h index 910c8dbd99..363d0bcbd5 100644 --- a/indra/llcommon/llinstancetracker.h +++ b/indra/llcommon/llinstancetracker.h @@ -28,6 +28,7 @@ #ifndef LL_LLINSTANCETRACKER_H #define LL_LLINSTANCETRACKER_H +#include #include #include @@ -81,8 +82,12 @@ protected: void decrementDepth(); U32 getDepth(); private: - U32 sIterationNestDepth; - }; +#ifdef LL_WINDOWS + std::atomic_uint32_t sIterationNestDepth; +#else + std::atomic_uint sIterationNestDepth; +#endif + }; }; LL_COMMON_API void assert_main_thread(); diff --git a/indra/llcommon/llmutex.cpp b/indra/llcommon/llmutex.cpp index cf84e50953..75f43a4704 100644 --- a/indra/llcommon/llmutex.cpp +++ b/indra/llcommon/llmutex.cpp @@ -24,9 +24,6 @@ */ #include "linden_common.h" -#include "llapr.h" - -#include "apr_portable.h" #include "llmutex.h" #include "llthread.h" diff --git a/indra/llcommon/llqueuedthread.h b/indra/llcommon/llqueuedthread.h index d3704b0fe2..5d3f873646 100644 --- a/indra/llcommon/llqueuedthread.h +++ b/indra/llcommon/llqueuedthread.h @@ -32,7 +32,7 @@ #include #include -#include "llapr.h" +#include "llatomic.h" #include "llthread.h" #include "llsimplehash.h" @@ -128,7 +128,7 @@ public: }; protected: - LLAtomic32 mStatus; + LLAtomicBase mStatus; U32 mPriority; U32 mFlags; }; @@ -198,7 +198,7 @@ public: protected: BOOL mThreaded; // if false, run on main thread and do updates during update() BOOL mStarted; // required when mThreaded is false to call startThread() from update() - LLAtomic32 mIdleThread; // request queue is empty (or we are quitting) and the thread is idle + LLAtomicBool mIdleThread; // request queue is empty (or we are quitting) and the thread is idle typedef std::set request_queue_t; request_queue_t mRequestQueue; diff --git a/indra/llcommon/llrefcount.h b/indra/llcommon/llrefcount.h index cdc60fa54f..fb0411d27b 100644 --- a/indra/llcommon/llrefcount.h +++ b/indra/llcommon/llrefcount.h @@ -29,7 +29,7 @@ #include #include #include "llmutex.h" -#include "llapr.h" +#include "llatomic.h" //---------------------------------------------------------------------------- // RefCount objects should generally only be accessed by way of LLPointer<>'s @@ -107,8 +107,8 @@ public: void unref() { llassert(mRef >= 1); - if ((--mRef) == 0) // See note in llapr.h on atomic decrement operator return value. - { + if ((--mRef) == 0) + { // If we hit zero, the caller should be the only smart pointer owning the object and we can delete it. // It is technically possible for a vanilla pointer to mess this up, or another thread to // jump in, find this object, create another smart pointer and end up dangling, but if @@ -124,7 +124,7 @@ public: } private: - LLAtomic32< S32 > mRef; + LLAtomicS32 mRef; }; /** diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h index 09776816a8..b1a6f61360 100644 --- a/indra/llcommon/llworkerthread.h +++ b/indra/llcommon/llworkerthread.h @@ -33,7 +33,7 @@ #include #include "llqueuedthread.h" -#include "llapr.h" +#include "llatomic.h" #define USE_FRAME_CALLBACK_MANAGER 0 diff --git a/indra/llcorehttp/_httpservice.h b/indra/llcorehttp/_httpservice.h index ac518a5de7..d0c37ac195 100644 --- a/indra/llcorehttp/_httpservice.h +++ b/indra/llcorehttp/_httpservice.h @@ -31,7 +31,7 @@ #include #include "linden_common.h" -#include "llapr.h" +#include "llatomic.h" #include "httpcommon.h" #include "httprequest.h" #include "_httppolicyglobal.h" diff --git a/indra/llcorehttp/_refcounted.h b/indra/llcorehttp/_refcounted.h index 7f713f2298..5cc8914395 100644 --- a/indra/llcorehttp/_refcounted.h +++ b/indra/llcorehttp/_refcounted.h @@ -34,7 +34,7 @@ #include #include -#include "llapr.h" +#include "llatomic.h" namespace LLCoreInt diff --git a/indra/llcorehttp/_thread.h b/indra/llcorehttp/_thread.h index e058d660e5..22b7750bad 100644 --- a/indra/llcorehttp/_thread.h +++ b/indra/llcorehttp/_thread.h @@ -33,6 +33,7 @@ #include #include +#include "apr.h" // thread-related functions #include "_refcounted.h" namespace LLCoreInt diff --git a/indra/llcrashlogger/llcrashlock.cpp b/indra/llcrashlogger/llcrashlock.cpp index 77abfbcf0f..18d164abde 100644 --- a/indra/llcrashlogger/llcrashlock.cpp +++ b/indra/llcrashlogger/llcrashlock.cpp @@ -27,6 +27,7 @@ #include "linden_common.h" +#include "llapr.h" // thread-related functions #include "llcrashlock.h" #include "lldir.h" #include "llsd.h" diff --git a/indra/llmessage/llproxy.h b/indra/llmessage/llproxy.h index 688dff7c83..87891901ad 100644 --- a/indra/llmessage/llproxy.h +++ b/indra/llmessage/llproxy.h @@ -298,7 +298,7 @@ private: private: // Is the HTTP proxy enabled? Safe to read in any thread, but do not write directly. // Instead use enableHTTPProxy() and disableHTTPProxy() instead. - mutable LLAtomic32 mHTTPProxyEnabled; + mutable LLAtomicBool mHTTPProxyEnabled; // Mutex to protect shared members in non-main thread calls to applyProxySettings(). mutable LLMutex mProxyMutex; diff --git a/indra/llvfs/llpidlock.cpp b/indra/llvfs/llpidlock.cpp index 6572edead3..f770e93d45 100644 --- a/indra/llvfs/llpidlock.cpp +++ b/indra/llvfs/llpidlock.cpp @@ -27,6 +27,7 @@ #include "linden_common.h" +#include "llapr.h" // thread-related functions #include "llpidlock.h" #include "lldir.h" #include "llsd.h" diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index e607b4a994..788fe6a19b 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -43,6 +43,7 @@ #define LL_LLAPPVIEWER_H #include "llallocator.h" +#include "llapr.h" #include "llcontrol.h" #include "llsys.h" // for LLOSInfo #include "lltimer.h" diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index a6002bd57f..2e7141bcfc 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -26,10 +26,11 @@ #include "llviewerprecompiledheaders.h" +#include "llapr.h" +#include "apr_portable.h" #include "apr_pools.h" #include "apr_dso.h" #include "llhttpconstants.h" -#include "llapr.h" #include "llmeshrepository.h" #include "llagent.h" diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h index 987b9375c0..81ea7aeee2 100644 --- a/indra/newview/lltexturecache.h +++ b/indra/newview/lltexturecache.h @@ -221,7 +221,7 @@ private: typedef std::map size_map_t; size_map_t mTexturesSizeMap; S64 mTexturesSizeTotal; - LLAtomic32 mDoPurge; + LLAtomicBool mDoPurge; typedef std::map idx_entry_map_t; idx_entry_map_t mUpdatedEntryMap; -- cgit v1.2.3 From 3527e9c0423f8a3c10c9d6e93805540315b285b6 Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Fri, 18 Jan 2019 16:12:49 +0200 Subject: SL-3488 Remove "Disable Selected" and "Disable All" Buttons --- indra/newview/llfloatertopobjects.cpp | 41 +++------------------- indra/newview/llfloatertopobjects.h | 11 +----- .../skins/default/xui/en/floater_top_objects.xml | 26 +------------- 3 files changed, 6 insertions(+), 72 deletions(-) diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp index 3e6fc3dc0d..9b5b3a0fc9 100644 --- a/indra/newview/llfloatertopobjects.cpp +++ b/indra/newview/llfloatertopobjects.cpp @@ -78,8 +78,6 @@ LLFloaterTopObjects::LLFloaterTopObjects(const LLSD& key) mCommitCallbackRegistrar.add("TopObjects.ShowBeacon", boost::bind(&LLFloaterTopObjects::onClickShowBeacon, this)); mCommitCallbackRegistrar.add("TopObjects.ReturnSelected", boost::bind(&LLFloaterTopObjects::onReturnSelected, this)); mCommitCallbackRegistrar.add("TopObjects.ReturnAll", boost::bind(&LLFloaterTopObjects::onReturnAll, this)); - mCommitCallbackRegistrar.add("TopObjects.DisableSelected", boost::bind(&LLFloaterTopObjects::onDisableSelected, this)); - mCommitCallbackRegistrar.add("TopObjects.DisableAll", boost::bind(&LLFloaterTopObjects::onDisableAll, this)); mCommitCallbackRegistrar.add("TopObjects.Refresh", boost::bind(&LLFloaterTopObjects::onRefresh, this)); mCommitCallbackRegistrar.add("TopObjects.GetByObjectName", boost::bind(&LLFloaterTopObjects::onGetByObjectName, this)); mCommitCallbackRegistrar.add("TopObjects.GetByOwnerName", boost::bind(&LLFloaterTopObjects::onGetByOwnerName, this)); @@ -332,7 +330,7 @@ void LLFloaterTopObjects::onClickShowBeacon() showBeacon(); } -void LLFloaterTopObjects::doToObjects(int action, bool all) +void LLFloaterTopObjects::returnObjects(bool all) { LLMessageSystem *msg = gMessageSystem; @@ -356,14 +354,7 @@ void LLFloaterTopObjects::doToObjects(int action, bool all) } if (start_message) { - if (action == ACTION_RETURN) - { - msg->newMessageFast(_PREHASH_ParcelReturnObjects); - } - else - { - msg->newMessageFast(_PREHASH_ParcelDisableObjects); - } + msg->newMessageFast(_PREHASH_ParcelReturnObjects); msg->nextBlockFast(_PREHASH_AgentData); msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); msg->addUUIDFast(_PREHASH_SessionID,gAgent.getSessionID()); @@ -397,7 +388,7 @@ bool LLFloaterTopObjects::callbackReturnAll(const LLSD& notification, const LLSD if(!instance) return false; if (option == 0) { - instance->doToObjects(ACTION_RETURN, true); + instance->returnObjects(true); } return false; } @@ -410,31 +401,7 @@ void LLFloaterTopObjects::onReturnAll() void LLFloaterTopObjects::onReturnSelected() { - doToObjects(ACTION_RETURN, false); -} - - -//static -bool LLFloaterTopObjects::callbackDisableAll(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - LLFloaterTopObjects* instance = LLFloaterReg::getTypedInstance("top_objects"); - if(!instance) return false; - if (option == 0) - { - instance->doToObjects(ACTION_DISABLE, true); - } - return false; -} - -void LLFloaterTopObjects::onDisableAll() -{ - LLNotificationsUtil::add("DisableAllTopObjects", LLSD(), LLSD(), callbackDisableAll); -} - -void LLFloaterTopObjects::onDisableSelected() -{ - doToObjects(ACTION_DISABLE, false); + returnObjects(false); } diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h index dbbe9ac521..3138249c7a 100644 --- a/indra/newview/llfloatertopobjects.h +++ b/indra/newview/llfloatertopobjects.h @@ -78,15 +78,12 @@ private: static void onDoubleClickObjectsList(void* data); void onClickShowBeacon(); - void doToObjects(int action, bool all); + void returnObjects(bool all); void onReturnAll(); void onReturnSelected(); - void onDisableAll(); - void onDisableSelected(); static bool callbackReturnAll(const LLSD& notification, const LLSD& response); - static bool callbackDisableAll(const LLSD& notification, const LLSD& response); void onGetByOwnerName(); void onGetByObjectName(); @@ -108,12 +105,6 @@ private: F32 mtotalScore; - enum - { - ACTION_RETURN = 0, - ACTION_DISABLE - }; - static LLFloaterTopObjects* sInstance; }; diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml index 36ceddd305..ceef541290 100644 --- a/indra/newview/skins/default/xui/en/floater_top_objects.xml +++ b/indra/newview/skins/default/xui/en/floater_top_objects.xml @@ -2,7 +2,7 @@ - - -- cgit v1.2.3 From af0e498293c86dc7bb1ae7911bf932b7b287e115 Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Mon, 21 Jan 2019 17:45:26 +0200 Subject: =?UTF-8?q?SL-10338=20FIXED=20The=20=E2=80=9Cadd=20friend=E2=80=9D?= =?UTF-8?q?=20button=20is=20available=20when=20user=20is=20already=20at=20?= =?UTF-8?q?your=20friends=20list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- indra/newview/llchatitemscontainerctrl.cpp | 2 ++ indra/newview/llfloaterland.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp index eddc87efcd..4f42868f1a 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -29,6 +29,7 @@ #include "llchatitemscontainerctrl.h" #include "lltextbox.h" +#include "llavataractions.h" #include "llavatariconctrl.h" #include "llcommandhandler.h" #include "llfloaterreg.h" @@ -204,6 +205,7 @@ void LLFloaterIMNearbyChatToastPanel::init(LLSD& notification) mMsgText = getChild("msg_text", false); mMsgText->setContentTrusted(false); + mMsgText->setIsFriendCallback(LLAvatarActions::isFriend); mMsgText->setText(std::string("")); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 88b3fb7b96..a462f391ca 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -415,6 +415,7 @@ BOOL LLPanelLandGeneral::postBuild() mTextSalePending = getChild("SalePending"); mTextOwnerLabel = getChild("Owner:"); mTextOwner = getChild("OwnerText"); + mTextOwner->setIsFriendCallback(LLAvatarActions::isFriend); mContentRating = getChild("ContentRatingText"); mLandType = getChild("LandTypeText"); @@ -1191,6 +1192,7 @@ BOOL LLPanelLandObjects::postBuild() mIconGroup = LLUIImageList::getInstance()->getUIImage("icon_group.tga", 0); mOwnerList = getChild("owner list"); + mOwnerList->setIsFriendCallback(LLAvatarActions::isFriend); mOwnerList->sortByColumnIndex(3, FALSE); childSetCommitCallback("owner list", onCommitList, this); mOwnerList->setDoubleClickCallback(onDoubleClickOwner, this); -- cgit v1.2.3 From 8a92a771ba547d9d6a8bd1234e2e0b144a8bfcf5 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 15 Jan 2019 22:27:28 +0200 Subject: SL-10291 Replace apr thread with standard C++11 functionality --- indra/llcommon/llthread.cpp | 77 +++++++------------- indra/llcommon/llthread.h | 12 ++-- indra/llcommon/llthreadsafequeue.cpp | 81 --------------------- indra/llcommon/llthreadsafequeue.h | 135 +++++++++++++++++++---------------- indra/newview/llmainlooprepeater.cpp | 2 +- 5 files changed, 104 insertions(+), 203 deletions(-) diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index 860415bb22..a4171729db 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -116,29 +116,27 @@ void LLThread::registerThreadID() // // Handed to the APR thread creation function // -void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap) +void LLThread::threadRun() { - LLThread *threadp = (LLThread *)datap; - #ifdef LL_WINDOWS - set_thread_name(-1, threadp->mName.c_str()); + set_thread_name(-1, mName.c_str()); #endif // for now, hard code all LLThreads to report to single master thread recorder, which is known to be running on main thread - threadp->mRecorder = new LLTrace::ThreadRecorder(*LLTrace::get_master_thread_recorder()); + mRecorder = new LLTrace::ThreadRecorder(*LLTrace::get_master_thread_recorder()); - sThreadID = threadp->mID; + sThreadID = mID; // Run the user supplied function do { try { - threadp->run(); + run(); } catch (const LLContinueError &e) { - LL_WARNS("THREAD") << "ContinueException on thread '" << threadp->mName << + LL_WARNS("THREAD") << "ContinueException on thread '" << mName << "' reentering run(). Error what is: '" << e.what() << "'" << LL_ENDL; //output possible call stacks to log file. LLError::LLCallStacks::print(); @@ -153,39 +151,25 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap //LL_INFOS() << "LLThread::staticRun() Exiting: " << threadp->mName << LL_ENDL; - delete threadp->mRecorder; - threadp->mRecorder = NULL; + delete mRecorder; + mRecorder = NULL; // We're done with the run function, this thread is done executing now. //NB: we are using this flag to sync across threads...we really need memory barriers here // Todo: add LLMutex per thread instead of flag? // We are using "while (mStatus != STOPPED) {ms_sleep();}" everywhere. - threadp->mStatus = STOPPED; - - return NULL; + mStatus = STOPPED; } LLThread::LLThread(const std::string& name, apr_pool_t *poolp) : mPaused(FALSE), mName(name), - mAPRThreadp(NULL), + mThreadp(NULL), mStatus(STOPPED), mRecorder(NULL) { mID = ++sIDIter; - - // Thread creation probably CAN be paranoid about APR being initialized, if necessary - if (poolp) - { - mIsLocalPool = FALSE; - mAPRPoolp = poolp; - } - else - { - mIsLocalPool = TRUE; - apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread - } mRunCondition = new LLCondition(); mDataLock = new LLMutex(); mLocalAPRFilePoolp = NULL ; @@ -217,7 +201,7 @@ void LLThread::shutdown() // Warning! If you somehow call the thread destructor from itself, // the thread will die in an unclean fashion! - if (mAPRThreadp) + if (mThreadp) { if (!isStopped()) { @@ -248,14 +232,19 @@ void LLThread::shutdown() { // This thread just wouldn't stop, even though we gave it time //LL_WARNS() << "LLThread::~LLThread() exiting thread before clean exit!" << LL_ENDL; - // Put a stake in its heart. - apr_thread_exit(mAPRThreadp, -1); + // Put a stake in its heart. (A very hostile method to force a thread to quit) +#if LL_WINDOWS + TerminateThread(mNativeHandle, 0); +#else + pthread_cancel(mNativeHandle); +#endif + delete mRecorder; mRecorder = NULL; mStatus = STOPPED; return; } - mAPRThreadp = NULL; + mThreadp = NULL; } delete mRunCondition; @@ -263,12 +252,6 @@ void LLThread::shutdown() delete mDataLock; mDataLock = NULL; - - if (mIsLocalPool && mAPRPoolp) - { - apr_pool_destroy(mAPRPoolp); - mAPRPoolp = 0; - } if (mRecorder) { @@ -287,19 +270,15 @@ void LLThread::start() // Set thread state to running mStatus = RUNNING; - apr_status_t status = - apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, mAPRPoolp); - - if(status == APR_SUCCESS) - { - // We won't bother joining - apr_thread_detach(mAPRThreadp); + try + { + mThreadp = new std::thread(std::bind(&LLThread::threadRun, this)); + mNativeHandle = mThreadp->native_handle(); } - else + catch (std::system_error& ex) { mStatus = STOPPED; - LL_WARNS() << "failed to start thread " << mName << LL_ENDL; - ll_apr_warn_status(status); + LL_WARNS() << "failed to start thread " << mName << " " << ex.what() << LL_ENDL; } } @@ -376,11 +355,7 @@ U32 LLThread::currentID() // static void LLThread::yield() { -#if LL_LINUX || LL_SOLARIS - sched_yield(); // annoyingly, apr_thread_yield is a noop on linux... -#else - apr_thread_yield(); -#endif + std::this_thread::yield(); } void LLThread::wake() diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h index dda7fa8ffb..863c9051f3 100644 --- a/indra/llcommon/llthread.h +++ b/indra/llcommon/llthread.h @@ -29,10 +29,10 @@ #include "llapp.h" #include "llapr.h" -#include "apr_thread_cond.h" #include "boost/intrusive_ptr.hpp" #include "llmutex.h" #include "llrefcount.h" +#include LL_COMMON_API void assert_main_thread(); @@ -86,7 +86,6 @@ public: // this kicks off the apr thread void start(void); - apr_pool_t *getAPRPool() { return mAPRPoolp; } LLVolatileAPRPool* getLocalAPRFilePool() { return mLocalAPRFilePoolp ; } U32 getID() const { return mID; } @@ -97,19 +96,18 @@ public: static void registerThreadID(); private: - BOOL mPaused; + bool mPaused; + std::thread::native_handle_type mNativeHandle; // for termination in case of issues // static function passed to APR thread creation routine - static void *APR_THREAD_FUNC staticRun(struct apr_thread_t *apr_threadp, void *datap); + void threadRun(); protected: std::string mName; class LLCondition* mRunCondition; LLMutex* mDataLock; - apr_thread_t *mAPRThreadp; - apr_pool_t *mAPRPoolp; - BOOL mIsLocalPool; + std::thread *mThreadp; EThreadStatus mStatus; U32 mID; LLTrace::ThreadRecorder* mRecorder; diff --git a/indra/llcommon/llthreadsafequeue.cpp b/indra/llcommon/llthreadsafequeue.cpp index 491f920c0f..bde36999ba 100644 --- a/indra/llcommon/llthreadsafequeue.cpp +++ b/indra/llcommon/llthreadsafequeue.cpp @@ -24,87 +24,6 @@ */ #include "linden_common.h" -#include -#include #include "llthreadsafequeue.h" -#include "llexception.h" - -// LLThreadSafeQueueImplementation -//----------------------------------------------------------------------------- - - -LLThreadSafeQueueImplementation::LLThreadSafeQueueImplementation(apr_pool_t * pool, unsigned int capacity): - mOwnsPool(pool == 0), - mPool(pool), - mQueue(0) -{ - if(mOwnsPool) { - apr_status_t status = apr_pool_create(&mPool, 0); - if(status != APR_SUCCESS) LLTHROW(LLThreadSafeQueueError("failed to allocate pool")); - } else { - ; // No op. - } - - apr_status_t status = apr_queue_create(&mQueue, capacity, mPool); - if(status != APR_SUCCESS) LLTHROW(LLThreadSafeQueueError("failed to allocate queue")); -} - - -LLThreadSafeQueueImplementation::~LLThreadSafeQueueImplementation() -{ - if(mQueue != 0) { - if(apr_queue_size(mQueue) != 0) LL_WARNS() << - "terminating queue which still contains " << apr_queue_size(mQueue) << - " elements;" << "memory will be leaked" << LL_ENDL; - apr_queue_term(mQueue); - } - if(mOwnsPool && (mPool != 0)) apr_pool_destroy(mPool); -} - - -void LLThreadSafeQueueImplementation::pushFront(void * element) -{ - apr_status_t status = apr_queue_push(mQueue, element); - - if(status == APR_EINTR) { - LLTHROW(LLThreadSafeQueueInterrupt()); - } else if(status != APR_SUCCESS) { - LLTHROW(LLThreadSafeQueueError("push failed")); - } else { - ; // Success. - } -} - - -bool LLThreadSafeQueueImplementation::tryPushFront(void * element){ - return apr_queue_trypush(mQueue, element) == APR_SUCCESS; -} - - -void * LLThreadSafeQueueImplementation::popBack(void) -{ - void * element; - apr_status_t status = apr_queue_pop(mQueue, &element); - - if(status == APR_EINTR) { - LLTHROW(LLThreadSafeQueueInterrupt()); - } else if(status != APR_SUCCESS) { - LLTHROW(LLThreadSafeQueueError("pop failed")); - } else { - return element; - } -} - - -bool LLThreadSafeQueueImplementation::tryPopBack(void *& element) -{ - return apr_queue_trypop(mQueue, &element) == APR_SUCCESS; -} - - -size_t LLThreadSafeQueueImplementation::size() -{ - return apr_queue_size(mQueue); -} diff --git a/indra/llcommon/llthreadsafequeue.h b/indra/llcommon/llthreadsafequeue.h index 45289ef0b4..b0bddac8e5 100644 --- a/indra/llcommon/llthreadsafequeue.h +++ b/indra/llcommon/llthreadsafequeue.h @@ -28,12 +28,20 @@ #define LL_LLTHREADSAFEQUEUE_H #include "llexception.h" +#include #include +#if LL_WINDOWS +#pragma warning (push) +#pragma warning (disable:4265) +#endif +// 'std::_Pad' : class has virtual functions, but destructor is not virtual +#include +#include -struct apr_pool_t; // From apr_pools.h -class LLThreadSafeQueueImplementation; // See below. - +#if LL_WINDOWS +#pragma warning (pop) +#endif // // A general queue exception. @@ -64,31 +72,6 @@ public: } }; - -struct apr_queue_t; // From apr_queue.h - - -// -// Implementation details. -// -class LL_COMMON_API LLThreadSafeQueueImplementation -{ -public: - LLThreadSafeQueueImplementation(apr_pool_t * pool, unsigned int capacity); - ~LLThreadSafeQueueImplementation(); - void pushFront(void * element); - bool tryPushFront(void * element); - void * popBack(void); - bool tryPopBack(void *& element); - size_t size(); - -private: - bool mOwnsPool; - apr_pool_t * mPool; - apr_queue_t * mQueue; -}; - - // // Implements a thread safe FIFO. // @@ -100,7 +83,7 @@ public: // If the pool is set to NULL one will be allocated and managed by this // queue. - LLThreadSafeQueue(apr_pool_t * pool = 0, unsigned int capacity = 1024); + LLThreadSafeQueue(U32 capacity = 1024); // Add an element to the front of queue (will block if the queue has // reached capacity). @@ -128,77 +111,103 @@ public: size_t size(); private: - LLThreadSafeQueueImplementation mImplementation; -}; - + std::deque< ElementT > mStorage; + U32 mCapacity; + std::mutex mLock; + std::condition_variable mCapacityCond; + std::condition_variable mEmptyCond; +}; // LLThreadSafeQueue //----------------------------------------------------------------------------- - template -LLThreadSafeQueue::LLThreadSafeQueue(apr_pool_t * pool, unsigned int capacity): - mImplementation(pool, capacity) +LLThreadSafeQueue::LLThreadSafeQueue(U32 capacity) : +mCapacity(capacity) { - ; // No op. } template void LLThreadSafeQueue::pushFront(ElementT const & element) { - ElementT * elementCopy = new ElementT(element); - try { - mImplementation.pushFront(elementCopy); - } catch (LLThreadSafeQueueInterrupt) { - delete elementCopy; - throw; - } + while (true) + { + std::unique_lock lock1(mLock); + + if (mStorage.size() < mCapacity) + { + mStorage.push_front(element); + mEmptyCond.notify_one(); + return; + } + + // Storage Full. Wait for signal. + mCapacityCond.wait(lock1); + } } template bool LLThreadSafeQueue::tryPushFront(ElementT const & element) { - ElementT * elementCopy = new ElementT(element); - bool result = mImplementation.tryPushFront(elementCopy); - if(!result) delete elementCopy; - return result; + std::unique_lock lock1(mLock, std::defer_lock); + if (!lock1.try_lock()) + return false; + + if (mStorage.size() >= mCapacity) + return false; + + mStorage.push_front(element); + mEmptyCond.notify_one(); + return true; } template ElementT LLThreadSafeQueue::popBack(void) { - ElementT * element = reinterpret_cast (mImplementation.popBack()); - ElementT result(*element); - delete element; - return result; + while (true) + { + std::unique_lock lock1(mLock); + + if (!mStorage.empty()) + { + ElementT value = mStorage.back(); + mStorage.pop_back(); + mCapacityCond.notify_one(); + return value; + } + + // Storage empty. Wait for signal. + mEmptyCond.wait(lock1); + } } template bool LLThreadSafeQueue::tryPopBack(ElementT & element) { - void * storedElement; - bool result = mImplementation.tryPopBack(storedElement); - if(result) { - ElementT * elementPtr = reinterpret_cast(storedElement); - element = *elementPtr; - delete elementPtr; - } else { - ; // No op. - } - return result; + std::unique_lock lock1(mLock, std::defer_lock); + if (!lock1.try_lock()) + return false; + + if (mStorage.empty()) + return false; + + element = mStorage.back(); + mStorage.pop_back(); + mCapacityCond.notify_one(); + return true; } template size_t LLThreadSafeQueue::size(void) { - return mImplementation.size(); + std::lock_guard lock(mLock); + return mStorage.size(); } - #endif diff --git a/indra/newview/llmainlooprepeater.cpp b/indra/newview/llmainlooprepeater.cpp index db8d2e4ede..6736e9a950 100644 --- a/indra/newview/llmainlooprepeater.cpp +++ b/indra/newview/llmainlooprepeater.cpp @@ -46,7 +46,7 @@ void LLMainLoopRepeater::start(void) { if(mQueue != 0) return; - mQueue = new LLThreadSafeQueue(gAPRPoolp, 1024); + mQueue = new LLThreadSafeQueue(1024); mMainLoopConnection = LLEventPumps::instance(). obtain("mainloop").listen(LLEventPump::inventName(), boost::bind(&LLMainLoopRepeater::onMainLoop, this, _1)); mRepeaterConnection = LLEventPumps::instance(). -- cgit v1.2.3 From 597106fa34bca95c2d01c0bf28c6b2bdc031fe35 Mon Sep 17 00:00:00 2001 From: Anchor Date: Mon, 28 Jan 2019 01:51:58 -0800 Subject: [SL-1461] - fix black skirt --- indra/newview/llvoavatar.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 9a4eb8b15b..2c42fbd3eb 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -3584,6 +3584,7 @@ void LLVOAvatar::updateAppearanceMessageDebugText() debug_line += llformat(" %s", (isSitting() ? "S" : "T")); debug_line += llformat("%s", (isMotionActive(ANIM_AGENT_SIT_GROUND_CONSTRAINED) ? "G" : "-")); } + LLVector3 ankle_right_pos_agent = mFootRightp->getWorldPosition(); LLVector3 normal; LLVector3 ankle_right_ground_agent = ankle_right_pos_agent; @@ -7463,7 +7464,16 @@ BOOL LLVOAvatar::isWearingWearableType(LLWearableType::EType type) const if (texture_dict->mIsUsedByBakedTexture) { const EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex; - return isTextureDefined(LLAvatarAppearanceDictionary::getInstance()->getBakedTexture(baked_index)->mTextureIndex); + + if (type == LLWearableType::WT_SKIRT) + { + return (LLAvatarAppearance::isWearingWearableType(type) && isTextureDefined(LLAvatarAppearanceDictionary::getInstance()->getBakedTexture(baked_index)->mTextureIndex)); + } + else + { + return isTextureDefined(LLAvatarAppearanceDictionary::getInstance()->getBakedTexture(baked_index)->mTextureIndex); + } + } return FALSE; } -- cgit v1.2.3 From d785c87d620cb17681ea6d3011461154d96ab9d5 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 29 Jan 2019 21:33:31 +0200 Subject: SL-2364 Fixed Viewer Caches Login Host DNS Entries Indefinetely --- indra/llcorehttp/_httpoprequest.cpp | 5 +++++ indra/newview/lllogininstance.cpp | 7 ++++++- indra/newview/llxmlrpctransaction.cpp | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/indra/llcorehttp/_httpoprequest.cpp b/indra/llcorehttp/_httpoprequest.cpp index cc49a2af80..0f76ff23ea 100644 --- a/indra/llcorehttp/_httpoprequest.cpp +++ b/indra/llcorehttp/_httpoprequest.cpp @@ -555,6 +555,11 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service) // about 700 or so requests and starts issuing TCP RSTs to // new connections. Reuse the DNS lookups for even a few // seconds and no RSTs. + // + // -1 stores forever + // 0 never stores + // any other positive number specifies seconds + // supposedly curl 7.62.0 can use TTL by default, otherwise default is 60 seconds check_curl_easy_setopt(mCurlHandle, CURLOPT_DNS_CACHE_TIMEOUT, dnsCacheTimeout); if (gpolicy.mUseLLProxy) diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index bc93fa2c20..bf4fc029ee 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -63,6 +63,9 @@ #include const S32 LOGIN_MAX_RETRIES = 3; +const F32 LOGIN_SRV_TIMEOUT_MIN = 10; +const F32 LOGIN_SRV_TIMEOUT_MAX = 120; +const F32 LOGIN_DNS_TIMEOUT_FACTOR = 0.9; // make DNS wait shorter then retry time class LLLoginInstance::Disposable { public: @@ -232,8 +235,10 @@ void LLLoginInstance::constructAuthParams(LLPointer user_credentia // Specify desired timeout/retry options LLSD http_params; - http_params["timeout"] = gSavedSettings.getF32("LoginSRVTimeout"); + F32 srv_timeout = llclamp(gSavedSettings.getF32("LoginSRVTimeout"), LOGIN_SRV_TIMEOUT_MIN, LOGIN_SRV_TIMEOUT_MAX); + http_params["timeout"] = srv_timeout; http_params["retries"] = LOGIN_MAX_RETRIES; + http_params["DNSCacheTimeout"] = srv_timeout * LOGIN_DNS_TIMEOUT_FACTOR; //Default: indefinite mRequestData.clear(); mRequestData["method"] = "login_to_simulator"; diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp index cc223c1f48..8e2539606b 100644 --- a/indra/newview/llxmlrpctransaction.cpp +++ b/indra/newview/llxmlrpctransaction.cpp @@ -362,6 +362,10 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip, const { httpOpts->setRetries(httpParams["retries"].asInteger()); } + if (httpParams.has("DNSCacheTimeout")) + { + httpOpts->setDNSCacheTimeout(httpParams["DNSCacheTimeout"].asInteger()); + } bool vefifySSLCert = !gSavedSettings.getBOOL("NoVerifySSLCert"); mCertStore = gSavedSettings.getString("CertStore"); -- cgit v1.2.3 From 756a6028eb1234d1a7a177bb438fe5980f87f8d4 Mon Sep 17 00:00:00 2001 From: Anchor Date: Mon, 4 Feb 2019 00:17:03 -0800 Subject: [SL-10179] - up the priority on baked images so they get fetched and decoded --- indra/newview/llvoavatar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 2c42fbd3eb..a962a89e28 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2380,7 +2380,7 @@ LLViewerFetchedTexture *LLVOAvatar::getBakedTextureImage(const U8 te, const LLUU } LL_DEBUGS("Avatar") << avString() << "get server-bake image from URL " << url << LL_ENDL; result = LLViewerTextureManager::getFetchedTextureFromUrl( - url, FTT_SERVER_BAKE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid); + url, FTT_SERVER_BAKE, TRUE, LLGLTexture::BOOST_AVATAR_BAKED_SELF, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid); if (result->isMissingAsset()) { result->setIsMissingAsset(false); -- cgit v1.2.3 From 38bc052ec69f3785584f0c94f209dac7224db5fa Mon Sep 17 00:00:00 2001 From: Anchor Date: Mon, 4 Feb 2019 00:46:48 -0800 Subject: [SL-10079] - animesh handling for baked images --- indra/newview/llpanelvolume.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp index 96dd309fa4..cd36c8f3f2 100644 --- a/indra/newview/llpanelvolume.cpp +++ b/indra/newview/llpanelvolume.cpp @@ -383,6 +383,26 @@ void LLPanelVolume::getState( ) } } getChildView("Animated Mesh Checkbox Ctrl")->setEnabled(enabled_animated_object_box); + + //refresh any bakes + if (root_volobjp) + { + root_volobjp->refreshBakeTexture(); + + LLViewerObject::const_child_list_t& child_list = root_volobjp->getChildren(); + for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); + iter != child_list.end(); ++iter) + { + LLViewerObject* objectp = *iter; + if (objectp) + { + objectp->refreshBakeTexture(); + } + } + + gAgentAvatarp->updateMeshVisibility(); + } + // Flexible properties BOOL is_flexible = volobjp && volobjp->isFlexible(); @@ -953,6 +973,25 @@ void LLPanelVolume::onCommitAnimatedMeshCheckbox(LLUICtrl *, void*) { volobjp->setExtendedMeshFlags(new_flags); } + + //refresh any bakes + if (volobjp) + { + volobjp->refreshBakeTexture(); + + LLViewerObject::const_child_list_t& child_list = volobjp->getChildren(); + for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); + iter != child_list.end(); ++iter) + { + LLViewerObject* objectp = *iter; + if (objectp) + { + objectp->refreshBakeTexture(); + } + } + + gAgentAvatarp->updateMeshVisibility(); + } } void LLPanelVolume::onCommitIsFlexible(LLUICtrl *, void*) -- cgit v1.2.3 From d903f8c1a1509c87af9bf5c173cab685be7dee03 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 5 Feb 2019 16:14:27 +0200 Subject: SL-10470 Fixed freeze due to extensive logging --- indra/newview/llinventorybridge.cpp | 2 +- indra/newview/llinventorymodel.cpp | 16 +++++++++++++--- indra/newview/llinventorypanel.cpp | 3 ++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index e7367d5ced..00b7732ee9 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1415,7 +1415,7 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type, break; default: - LL_INFOS() << "Unhandled asset type (llassetstorage.h): " + LL_INFOS_ONCE() << "Unhandled asset type (llassetstorage.h): " << (S32)asset_type << " (" << LLAssetType::lookup(asset_type) << ")" << LL_ENDL; break; } diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index a520e0171e..b140c7c38e 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -1820,9 +1820,19 @@ void LLInventoryModel::addItem(LLViewerInventoryItem* item) if (LLAssetType::lookup(item->getType()) == LLAssetType::badLookup()) { - LL_WARNS(LOG_INV) << "Got unknown asset type for item [ name: " << item->getName() - << " type: " << item->getType() - << " inv-type: " << item->getInventoryType() << " ]." << LL_ENDL; + if (item->getType() >= LLAssetType::AT_COUNT) + { + // Not yet supported. + LL_DEBUGS(LOG_INV) << "Got unknown asset type for item [ name: " << item->getName() + << " type: " << item->getType() + << " inv-type: " << item->getInventoryType() << " ]." << LL_ENDL; + } + else + { + LL_WARNS(LOG_INV) << "Got unknown asset type for item [ name: " << item->getName() + << " type: " << item->getType() + << " inv-type: " << item->getInventoryType() << " ]." << LL_ENDL; + } } // This condition means that we tried to add a link without the baseobj being in memory. diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 3992b506e9..d4993a1091 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -871,7 +871,8 @@ LLFolderViewItem* LLInventoryPanel::buildNewViews(const LLUUID& id) if (objectp->getType() >= LLAssetType::AT_COUNT) { - LL_WARNS() << "LLInventoryPanel::buildNewViews called with unknown objectp->mType : " + // Example: Happens when we add assets of new, not yet supported type to library + LL_DEBUGS() << "LLInventoryPanel::buildNewViews called with unknown objectp->mType : " << ((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID() << LL_ENDL; -- cgit v1.2.3 From c0abc508f9bdedf05748186472ea433cd8ddd9c6 Mon Sep 17 00:00:00 2001 From: andreykproductengine Date: Tue, 5 Feb 2019 17:30:24 +0200 Subject: SL-10466 Viewer throwing misleading notification --- indra/newview/llviewermessage.cpp | 29 ++++++---------------- .../newview/skins/default/xui/en/notifications.xml | 22 ---------------- 2 files changed, 7 insertions(+), 44 deletions(-) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 981d226824..e50c8ee9f0 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5531,17 +5531,6 @@ void notify_cautioned_script_question(const LLSD& notification, const LLSD& resp void script_question_mute(const LLUUID& item_id, const std::string& object_name); -bool unknown_script_question_cb(const LLSD& notification, const LLSD& response) -{ - // Only care if they muted the object here. - if ( response["Mute"] ) // mute - { - LLUUID task_id = notification["payload"]["task_id"].asUUID(); - script_question_mute(task_id,notification["payload"]["object_name"].asString()); - } - return false; -} - void experiencePermissionBlock(LLUUID experience, LLSD result) { LLSD permission; @@ -5647,8 +5636,7 @@ void script_question_mute(const LLUUID& task_id, const std::string& object_name) bool matches(const LLNotificationPtr notification) const { if (notification->getName() == "ScriptQuestionCaution" - || notification->getName() == "ScriptQuestion" - || notification->getName() == "UnknownScriptQuestion") + || notification->getName() == "ScriptQuestion") { return (notification->getPayload()["task_id"].asUUID() == blocked_id); } @@ -5665,7 +5653,6 @@ void script_question_mute(const LLUUID& task_id, const std::string& object_name) static LLNotificationFunctorRegistration script_question_cb_reg_1("ScriptQuestion", script_question_cb); static LLNotificationFunctorRegistration script_question_cb_reg_2("ScriptQuestionCaution", script_question_cb); static LLNotificationFunctorRegistration script_question_cb_reg_3("ScriptQuestionExperience", script_question_cb); -static LLNotificationFunctorRegistration unknown_script_question_cb_reg("UnknownScriptQuestion", unknown_script_question_cb); void process_script_experience_details(const LLSD& experience_details, LLSD args, LLSD payload) { @@ -5778,14 +5765,12 @@ void process_script_question(LLMessageSystem *msg, void **user_data) args["QUESTIONS"] = script_question; if (known_questions != questions) - { // This is in addition to the normal dialog. - LLSD payload; - payload["task_id"] = taskid; - payload["item_id"] = itemid; - payload["object_name"] = object_name; - - args["DOWNLOADURL"] = LLTrans::getString("ViewerDownloadURL"); - LLNotificationsUtil::add("UnknownScriptQuestion",args,payload); + { + // This is in addition to the normal dialog. + // Viewer got a request for not supported/implemented permission + LL_WARNS("Messaging") << "Object \"" << object_name << "\" requested " << script_question + << " permission. Permission is unknown and can't be granted. Item id: " << itemid + << " taskid:" << taskid << LL_ENDL; } if (known_questions) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 23a8d21f8a..efc5a30b63 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -7766,28 +7766,6 @@ Do not allow access if you do not fully understand why it wants access to your a - -The runtime script permission requested by '<nolink>[OBJECTNAME]</nolink>', an object owned by '[NAME]', isn't recognized by the viewer and can't be granted. - -To grant this permission please update your viewer to the latest version from [DOWNLOADURL]. - confirm -
-