diff options
| -rw-r--r-- | .github/workflows/build.yaml | 4 | ||||
| -rw-r--r-- | indra/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | indra/llcommon/fsyspath.h | 6 | ||||
| -rw-r--r-- | indra/llcommon/llqueuedthread.cpp | 4 | ||||
| -rw-r--r-- | indra/llrender/llfontfreetype.cpp | 2 | ||||
| -rw-r--r-- | indra/llrender/llimagegl.cpp | 2 | ||||
| -rw-r--r-- | indra/llwindow/llwindowmacosx.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/gltfscenemanager.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.h | 4 | ||||
| -rw-r--r-- | indra/newview/llpanelemojicomplete.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/lltexturefetch.cpp | 18 | ||||
| -rw-r--r-- | indra/newview/llviewermedia.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llvoicewebrtc.cpp | 20 | ||||
| -rw-r--r-- | indra/viewer_components/login/lllogin.cpp | 2 | 
16 files changed, 51 insertions, 40 deletions
| diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 7d6bcd2bc4..60ad7e8fe5 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -42,7 +42,7 @@ jobs:      needs: setup      strategy:        matrix: -        runner: [windows-large, macos-12-large] +        runner: [windows-large, macos-15-xlarge]          configuration: ${{ fromJSON(needs.setup.outputs.configurations) }}      runs-on: ${{ matrix.runner }}      outputs: @@ -64,7 +64,7 @@ jobs:        # autobuild-package.xml.        AUTOBUILD_VCS_INFO: "true"        AUTOBUILD_VSVER: "170" -      DEVELOPER_DIR: "/Applications/Xcode_14.0.1.app/Contents/Developer" +      DEVELOPER_DIR: "/Applications/Xcode_16.1.app/Contents/Developer"        # Ensure that Linden viewer builds engage Bugsplat.        BUGSPLAT_DB: ${{ needs.setup.outputs.bugsplat_db }}        build_coverity: false diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt index 422927704a..3170dbc180 100644 --- a/indra/CMakeLists.txt +++ b/indra/CMakeLists.txt @@ -29,6 +29,11 @@ else()    set( USE_AUTOBUILD_3P ON )  endif() +if (NOT DEFINED CMAKE_CXX_STANDARD) +  set(CMAKE_CXX_STANDARD 20) +endif() +set(CMAKE_CXX_STANDARD_REQUIRED ON) +  include(Variables)  include(BuildVersion) diff --git a/indra/llcommon/fsyspath.h b/indra/llcommon/fsyspath.h index 1b4aec09b4..e9c96edce3 100644 --- a/indra/llcommon/fsyspath.h +++ b/indra/llcommon/fsyspath.h @@ -68,7 +68,11 @@ public:      }      // shadow base-class string() method with UTF-8 aware method -    std::string string() const { return super::u8string(); } +    std::string string() const +    { +        auto u8 = super::u8string(); +        return std::string(u8.begin(), u8.end()); +    }      // On Posix systems, where value_type is already char, this operator      // std::string() method shadows the base class operator string_type()      // method. But on Windows, where value_type is wchar_t, the base class diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp index 1c4ac5a7bf..0196a24b18 100644 --- a/indra/llcommon/llqueuedthread.cpp +++ b/indra/llcommon/llqueuedthread.cpp @@ -146,7 +146,7 @@ size_t LLQueuedThread::updateQueue(F32 max_time_ms)          // schedule a call to threadedUpdate for every call to updateQueue          if (!isQuitting())          { -            mRequestQueue.post([=]() +            mRequestQueue.post([=, this]()                  {                      LL_PROFILE_ZONE_NAMED_CATEGORY_THREAD("qt - update");                      mIdleThread = false; @@ -474,7 +474,7 @@ void LLQueuedThread::processRequest(LLQueuedThread::QueuedRequest* req)  #else                  using namespace std::chrono_literals;                  auto retry_time = LL::WorkQueue::TimePoint::clock::now() + 16ms; -                mRequestQueue.post([=] +                mRequestQueue.post([=, this]                      {                          LL_PROFILE_ZONE_NAMED("processRequest - retry");                          if (LL::WorkQueue::TimePoint::clock::now() < retry_time) diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp index 1f14d82bf1..38dc23d1dc 100644 --- a/indra/llrender/llfontfreetype.cpp +++ b/indra/llrender/llfontfreetype.cpp @@ -715,7 +715,7 @@ void LLFontFreetype::renderGlyph(EFontGlyphType bitmap_type, U32 glyph_index, ll          if (error == FT_Err_Out_Of_Memory)          {              LLError::LLUserWarningMsg::showOutOfMemory(); -            LL_ERRS() << "Out of memory loading glyph for character " << wch << LL_ENDL; +            LL_ERRS() << "Out of memory loading glyph for character " << llformat("U+%xu", U32(wch)) << LL_ENDL;          }          std::string message = llformat( diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index 3858811a50..0bfcb5d9d2 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -1773,7 +1773,7 @@ void LLImageGL::syncToMainThread(LLGLuint new_tex_name)      ref();      LL::WorkQueue::postMaybe(          mMainQueue, -        [=]() +        [=, this]()          {              LL_PROFILE_ZONE_NAMED("cglt - delete callback");              syncTexName(new_tex_name); diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index f26d692363..6c3be3eef8 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -1060,7 +1060,7 @@ F32 LLWindowMacOSX::getGamma()          &greenGamma,          &blueMin,          &blueMax, -        &blueGamma) == noErr) +        &blueGamma) == kCGErrorSuccess)      {          // So many choices...          // Let's just return the green channel gamma for now. @@ -1111,7 +1111,7 @@ bool LLWindowMacOSX::setGamma(const F32 gamma)          &greenGamma,          &blueMin,          &blueMax, -        &blueGamma) != noErr) +        &blueGamma) != kCGErrorSuccess)      {          return false;      } @@ -1126,7 +1126,7 @@ bool LLWindowMacOSX::setGamma(const F32 gamma)          gamma,          blueMin,          blueMax, -        gamma) != noErr) +        gamma) != kCGErrorSuccess)      {          return false;      } @@ -1178,7 +1178,7 @@ bool LLWindowMacOSX::setCursorPosition(const LLCoordWindow position)      newPosition.y = screen_pos.mY;      CGSetLocalEventsSuppressionInterval(0.0); -    if(CGWarpMouseCursorPosition(newPosition) == noErr) +    if(CGWarpMouseCursorPosition(newPosition) == kCGErrorSuccess)      {          result = true;      } diff --git a/indra/newview/gltfscenemanager.cpp b/indra/newview/gltfscenemanager.cpp index 2d6d9a153e..7863d25696 100644 --- a/indra/newview/gltfscenemanager.cpp +++ b/indra/newview/gltfscenemanager.cpp @@ -500,7 +500,7 @@ void GLTFSceneManager::update()              LLNewBufferedResourceUploadInfo::uploadFinish_f finish = [this, buffer](LLUUID assetId, LLSD response)              {                  LLAppViewer::instance()->postToMainCoro( -                    [=]() +                    [=, this]()                      {                          if (mUploadingAsset)                          { diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index a5bed1dbe6..93453f507c 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -548,8 +548,8 @@ LLViewerFetchedTexture* LLMeshUploadThread::FindViewerTexture(const LLImportMate      return ppTex ? (*ppTex).get() : NULL;  } -volatile S32 LLMeshRepoThread::sActiveHeaderRequests = 0; -volatile S32 LLMeshRepoThread::sActiveLODRequests = 0; +std::atomic<S32> LLMeshRepoThread::sActiveHeaderRequests = 0; +std::atomic<S32> LLMeshRepoThread::sActiveLODRequests = 0;  U32 LLMeshRepoThread::sMaxConcurrentRequests = 1;  S32 LLMeshRepoThread::sRequestLowWater = REQUEST2_LOW_WATER_MIN;  S32 LLMeshRepoThread::sRequestHighWater = REQUEST2_HIGH_WATER_MIN; @@ -3916,7 +3916,7 @@ void LLMeshRepository::notifyLoadedMeshes()              }              // erase from background thread -            mThread->mWorkQueue.post([=]() +            mThread->mWorkQueue.post([=, this]()                  {                      mThread->mSkinMap.erase(id);                  }); diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index b5c2424578..3d25a4dd78 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -256,8 +256,8 @@ class LLMeshRepoThread : public LLThread  {  public: -    volatile static S32 sActiveHeaderRequests; -    volatile static S32 sActiveLODRequests; +    static std::atomic<S32> sActiveHeaderRequests; +    static std::atomic<S32> sActiveLODRequests;      static U32 sMaxConcurrentRequests;      static S32 sRequestLowWater;      static S32 sRequestHighWater; diff --git a/indra/newview/llpanelemojicomplete.cpp b/indra/newview/llpanelemojicomplete.cpp index cb89a5910e..fc1bf6ca93 100644 --- a/indra/newview/llpanelemojicomplete.cpp +++ b/indra/newview/llpanelemojicomplete.cpp @@ -438,7 +438,7 @@ void LLPanelEmojiComplete::updateConstraints()  {      mRenderRect = getLocalRect(); -    mEmojiWidth = (U16)(mIconFont->getWidthF32(u8"\U0001F431") + mPadding * 2); +    mEmojiWidth = (U16)(mIconFont->getWidthF32(LLWString(1, 0x1F431).c_str()) + mPadding * 2);      if (mVertical)      {          mEmojiHeight = mIconFont->getLineHeight() + mPadding * 2; diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index bac0c736b1..087761cbd0 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -29,6 +29,7 @@  #include <iostream>  #include <map>  #include <algorithm> +#include <atomic>  #include "lltexturefetch.h" @@ -2843,7 +2844,7 @@ bool LLTextureFetch::getRequestFinished(const LLUUID& id, S32& discard_level, S3  bool LLTextureFetch::updateRequestPriority(const LLUUID& id, F32 priority)  {      LL_PROFILE_ZONE_SCOPED; -    mRequestQueue.tryPost([=]() +    mRequestQueue.tryPost([=, this]()          {              LLTextureFetchWorker* worker = getWorker(id);              if (worker) @@ -3571,29 +3572,30 @@ TFReqSendMetrics::doWork(LLTextureFetch * fetcher)      //if (! gViewerAssetStatsThread1)      //  return true; -    static volatile bool reporting_started(false); -    static volatile S32 report_sequence(0); +    static std::atomic<bool> reporting_started(false); +    static std::atomic<S32> report_sequence(0);      // In mStatsSD, we have a copy we own of the LLSD representation      // of the asset stats. Add some additional fields and ship it off.      static const S32 metrics_data_version = 2; -    bool initial_report = !reporting_started; +    bool initial_report = !reporting_started.load();      mStatsSD["session_id"] = mSessionID;      mStatsSD["agent_id"] = mAgentID;      mStatsSD["message"] = "ViewerAssetMetrics"; -    mStatsSD["sequence"] = report_sequence; +    mStatsSD["sequence"] = report_sequence.load();      mStatsSD["initial"] = initial_report;      mStatsSD["version"] = metrics_data_version;      mStatsSD["break"] = static_cast<bool>(LLTextureFetch::svMetricsDataBreak);      // Update sequence number -    if (S32_MAX == ++report_sequence) +    if (S32_MAX == report_sequence.fetch_add(1))      { -        report_sequence = 0; +        report_sequence.store(0);      } -    reporting_started = true; + +    reporting_started.store(true);      // Limit the size of the stats report if necessary. diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 4e7416bb63..d688d5930c 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -2902,14 +2902,14 @@ void LLViewerMediaImpl::update()              media_tex->ref();              main_queue->postTo(                  mTexUpdateQueue, // Worker thread queue -                [=]() // work done on update worker thread +                [=, this]() // work done on update worker thread                  {  #if LL_IMAGEGL_THREAD_CHECK                      media_tex->getGLTexture()->mActiveThread = LLThread::currentID();  #endif                      doMediaTexUpdate(media_tex, data, data_width, data_height, x_pos, y_pos, width, height, true);                  }, -                [=]() // callback to main thread +                [=, this]() // callback to main thread                  {  #if LL_IMAGEGL_THREAD_CHECK                      media_tex->getGLTexture()->mActiveThread = LLThread::currentID(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 5a7d507b74..1795d62adc 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1331,7 +1331,7 @@ LLWindowCallbacks::DragNDropResult LLViewerWindow::handleDragNDrop( LLWindow *wi                                  // Check the whitelist, if there's media (otherwise just show it)                                  if (te->getMediaData() == NULL || te->getMediaData()->checkCandidateUrl(url))                                  { -                                    if ( obj != mDragHoveredObject) +                                    if ( obj != mDragHoveredObject.get())                                      {                                          // Highlight the dragged object                                          LLSelectMgr::getInstance()->unhighlightObjectOnly(mDragHoveredObject); diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp index 0bb65f7431..93c217a7ba 100644 --- a/indra/newview/llvoicewebrtc.cpp +++ b/indra/newview/llvoicewebrtc.cpp @@ -556,7 +556,7 @@ void LLWebRTCVoiceClient::voiceConnectionCoro()                  }              }              LL::WorkQueue::postMaybe(mMainQueue, -                [=] { +                [=, this] {                      if  (sShuttingDown)                      {                          return; @@ -674,7 +674,7 @@ void LLWebRTCVoiceClient::OnDevicesChanged(const llwebrtc::LLWebRTCVoiceDeviceLi  {      LL::WorkQueue::postMaybe(mMainQueue, -                             [=] +                             [=, this]          {              OnDevicesChangedImpl(render_devices, capture_devices);          }); @@ -2211,7 +2211,7 @@ LLVoiceWebRTCConnection::~LLVoiceWebRTCConnection()  void LLVoiceWebRTCConnection::OnIceGatheringState(llwebrtc::LLWebRTCSignalingObserver::EIceGatheringState state)  {      LL::WorkQueue::postMaybe(mMainQueue, -        [=] { +        [=, this] {              LL_DEBUGS("Voice") << "Ice Gathering voice account. " << state << LL_ENDL;              switch (state) @@ -2234,7 +2234,7 @@ void LLVoiceWebRTCConnection::OnIceGatheringState(llwebrtc::LLWebRTCSignalingObs  // callback from llwebrtc  void LLVoiceWebRTCConnection::OnIceCandidate(const llwebrtc::LLWebRTCIceCandidate& candidate)  { -    LL::WorkQueue::postMaybe(mMainQueue, [=] { mIceCandidates.push_back(candidate); }); +    LL::WorkQueue::postMaybe(mMainQueue, [=, this] { mIceCandidates.push_back(candidate); });  }  void LLVoiceWebRTCConnection::processIceUpdates() @@ -2352,7 +2352,7 @@ void LLVoiceWebRTCConnection::processIceUpdatesCoro(connectionPtr_t connection)  void LLVoiceWebRTCConnection::OnOfferAvailable(const std::string &sdp)  {      LL::WorkQueue::postMaybe(mMainQueue, -        [=] { +        [=, this] {              if (mShutDown)              {                  return; @@ -2379,7 +2379,7 @@ void LLVoiceWebRTCConnection::OnOfferAvailable(const std::string &sdp)  void LLVoiceWebRTCConnection::OnAudioEstablished(llwebrtc::LLWebRTCAudioInterface* audio_interface)  {      LL::WorkQueue::postMaybe(mMainQueue, -        [=] { +        [=, this] {              if (mShutDown)              {                  return; @@ -2401,7 +2401,7 @@ void LLVoiceWebRTCConnection::OnAudioEstablished(llwebrtc::LLWebRTCAudioInterfac  void LLVoiceWebRTCConnection::OnRenegotiationNeeded()  {      LL::WorkQueue::postMaybe(mMainQueue, -        [=] { +        [=, this] {              LL_DEBUGS("Voice") << "Voice channel requires renegotiation." << LL_ENDL;              if (!mShutDown)              { @@ -2415,7 +2415,7 @@ void LLVoiceWebRTCConnection::OnRenegotiationNeeded()  void LLVoiceWebRTCConnection::OnPeerConnectionClosed()  {      LL::WorkQueue::postMaybe(mMainQueue, -        [=] { +        [=, this] {              LL_DEBUGS("Voice") << "Peer connection has closed." << LL_ENDL;              if (mVoiceConnectionState == VOICE_STATE_WAIT_FOR_CLOSE)              { @@ -2888,7 +2888,7 @@ bool LLVoiceWebRTCConnection::connectionStateMachine()  // llwebrtc callback  void LLVoiceWebRTCConnection::OnDataReceived(const std::string& data, bool binary)  { -    LL::WorkQueue::postMaybe(mMainQueue, [=] { LLVoiceWebRTCConnection::OnDataReceivedImpl(data, binary); }); +    LL::WorkQueue::postMaybe(mMainQueue, [=, this] { LLVoiceWebRTCConnection::OnDataReceivedImpl(data, binary); });  }  // @@ -3044,7 +3044,7 @@ void LLVoiceWebRTCConnection::OnDataReceivedImpl(const std::string &data, bool b  void LLVoiceWebRTCConnection::OnDataChannelReady(llwebrtc::LLWebRTCDataInterface *data_interface)  {      LL::WorkQueue::postMaybe(mMainQueue, -        [=] { +        [=, this] {              if (mShutDown)              {                  return; diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp index feebecf4cb..425df0e0f9 100644 --- a/indra/viewer_components/login/lllogin.cpp +++ b/indra/viewer_components/login/lllogin.cpp @@ -128,7 +128,7 @@ void LLLogin::Impl::connect(const std::string& uri, const LLSD& login_params)      // Launch a coroutine with our login_() method. Run the coroutine until      // its first wait; at that point, return here.      std::string coroname = -        LLCoros::instance().launch("LLLogin::Impl::login_", [=]() { loginCoro(uri, login_params); }); +        LLCoros::instance().launch("LLLogin::Impl::login_", [=, this]() { loginCoro(uri, login_params); });      LL_DEBUGS("LLLogin") << " connected with uri '" << uri << "', login_params " << login_params << LL_ENDL;  } | 
