Skip to content
Snippets Groups Projects
  1. Mar 25, 2020
    • Anchor's avatar
      32f1dfa5
    • Nat Goodspeed's avatar
      DRTVWR-494: Use std::thread::id for LLThread::currentID(). · 5e7df752
      Nat Goodspeed authored
      LLThread::currentID() used to return a U32, a distinct unsigned value
      incremented by explicitly constructing LLThread or by calling LLThread::
      registerThreadID() early in a thread launched by other means. The latter
      imposed an unobvious requirement on new code based on std::thread. Using
      std::thread::id instead delegates to the compiler/library the problem of
      distinguishing threads launched by any means.
      
      Change lots of explicit U32 declarations. Introduce LLThread::id_t typedef to
      avoid having to run around fixing uses again if we later revisit this decision.
      
      LLMutex, which stores an LLThread::id_t, wants a distinguished value meaning
      NO_THREAD, and had an enum with that name. But as std::thread::id promises
      that the default-constructed value is distinct from every valid value,
      NO_THREAD becomes unnecessary and goes away.
      
      Because LLMutex now stores LLThread::id_t instead of U32, make llmutex.h
      #include "llthread.h" instead of the other way around. This makes LLMutex an
      incomplete type within llthread.h, so move LLThread::lockData() and
      unlockData() to the .cpp file. Similarly, remove llrefcount.h's #include
      "llmutex.h" to break circularity; instead forward-declare LLMutex.
      
      It turns out that a number of source files assumed that #include "llthread.h"
      would get the definition for LLMutex. Sprinkle #include "llmutex.h" as needed.
      
      In the SAFE_SSL code in llcorehttp/httpcommon.cpp, there's an ssl_thread_id()
      callback that returns an unsigned long to the SSL library. When LLThread::
      currentID() was U32, we could simply return that. But std::thread::id is very
      deliberately opaque, and can't be reinterpret_cast to unsigned long.
      Fortunately it can be hashed because std::hash is specialized with that type.
      5e7df752
  2. Jun 03, 2019
  3. Jan 15, 2019
  4. Jan 16, 2019
  5. Jan 14, 2019
  6. Dec 15, 2018
    • Nat Goodspeed's avatar
      SL-10153: auto name{expression} declares an initializer_list · 4a136572
      Nat Goodspeed authored
      instead of a variable of type decltype(expression).
      
      Using SHGetKnownFolderPath(FOLDERID_Fonts) in LLFontGL::getFontPathSystem()
      requires new Windows #include files.
      
      A variable with a constructor can't be declared within the braces of a switch
      statement, even outside any of its case clauses.
      4a136572
  7. Dec 14, 2018
    • Nat Goodspeed's avatar
      SL-10153: Review and rationalize fetching paths from environment. · c4096f67
      Nat Goodspeed authored
      Use LLStringUtil::getenv() or getoptenv() whenever we fetch a string that will
      be used as a pathname.
      
      Use LLFile::tmpdir() instead of getenv("TEMP").
      
      As an added extra-special bonus, finally clean up $TMP/llcontrol-test-zzzzzz
      directories that have been accumulating every time we run a local build!
      c4096f67
  8. Dec 11, 2018
  9. Dec 10, 2018
  10. Dec 08, 2018
  11. Dec 06, 2018
  12. Dec 05, 2018
  13. Sep 13, 2018
  14. Sep 07, 2018
  15. Sep 05, 2018
  16. Aug 21, 2018
  17. Mar 02, 2018
  18. Feb 28, 2018
  19. Feb 22, 2018
  20. Feb 21, 2018
  21. Feb 15, 2018
  22. Jan 23, 2018
  23. Dec 20, 2017
    • Nat Goodspeed's avatar
      MAINT-8087: Use env vars from VMP for AppData\Roaming and Local. · 5002bf56
      Nat Goodspeed authored
      On Windows, when logged in with a non-ASCII username, every one of the three
      documented APIs -- SHGetSpecialFolderPath(), SHGetFolderPath() and
      SHGetKnownFolderPath() -- fails to retrieve any pathname at all. We cannot
      account for the fact that the oldest of these continues to work with the
      release viewer and within a Python script (though not, curiously, from a
      Python interactive session). With a non-ASCII username, they consistently fail
      when called from an Alex Ivy viewer build: "The filename, directory name, or
      volume label syntax is incorrect."
      
      Empirically, with a non-ASCII username, the preset APPDATA and LOCALAPPDATA
      environment variables are also useless, e.g. c:\Users\??????\AppData\Roaming
      where those are, yup, actual question marks.
      
      Empirically, the VMP is able to successfully call SHGetFolderPath() to
      retrieve both AppData\Roaming and AppData\Local. Therefore, we make the VMP
      set the APPDATA and LOCALAPPDATA environment variables to the UTF-8 encoded
      correct pathnames. Instead of calling SHGetSomethingFolderPath() at all, make
      LLDir_Win32 retrieve those environment variables.
      
      Make LLFile::mkdir() treat "directory already exists" as a success case. Every
      single call fell into one of two categories: either it didn't check success at
      all, or it tested specially to exempt errno == EEXIST. Migrate that test into
      mkdir(); eliminate it from call sites.
      
      Make LLDir::append() and add() convenience functions accept variadic
      arguments. Replace add(add()...) constructs, as well as clumsy concatenations
      of directory names and getDirDelimiter(), with simple variadic add() calls.
      5002bf56
  24. Dec 14, 2017
  25. Aug 18, 2017
  26. Apr 19, 2017
  27. Dec 20, 2016
  28. May 25, 2017
  29. Dec 15, 2016
  30. Nov 14, 2016
  31. Jul 28, 2016
  32. Jul 21, 2016
  33. Jul 05, 2016
  34. Nov 10, 2015
Loading