Skip to content
Snippets Groups Projects
  1. Aug 24, 2020
  2. Mar 25, 2020
    • 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
  3. Mar 19, 2020
  4. Jan 15, 2019
  5. Nov 10, 2015
  6. Mar 29, 2013
  7. Dec 23, 2012
  8. Dec 05, 2011
  9. Oct 14, 2011
  10. Oct 05, 2011
  11. Feb 05, 2011
    • Aleric Inglewood's avatar
      Introduces a LLThreadLocalData class that can be · ef490e30
      Aleric Inglewood authored
      accessed through the static LLThread::tldata().
      Currently this object contains two (public) thread-local
      objects: a LLAPRRootPool and a LLVolatileAPRPool.
      
      The first is the general memory pool used by this thread
      (and this thread alone), while the second is intended
      for short lived memory allocations (needed for APR).
      The advantages of not mixing those two is that the latter
      is used most frequently, and as a result of it's nature
      can be destroyed and reconstructed on a "regular" basis.
      
      This patch adds LLAPRPool (completely replacing the old one),
      which is a wrapper around apr_pool_t* and has complete
      thread-safity checking.
      
      Whenever an apr call requires memory for some resource,
      a memory pool in the form of an LLAPRPool object can
      be created with the same life-time as this resource;
      assuring clean up of the memory no sooner, but also
      not much later than the life-time of the resource
      that needs the memory.
      
      Many, many function calls and constructors had the
      pool parameter simply removed (it is no longer the
      concern of the developer, if you don't write code
      that actually does an libapr call then you are no
      longer bothered with memory pools at all).
      
      However, I kept the notion of short-lived and
      long-lived allocations alive (see my remark in
      the jira here: https://jira.secondlife.com/browse/STORM-864?focusedCommentId=235356&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-235356
      which requires that the LLAPRFile API needs
      to allow the user to specify how long they
      think a file will stay open. By choosing
      'short_lived' as default for the constructor
      that immediately opens a file, the number of
      instances where this needs to be specified is
      drastically reduced however (obviously, any
      automatic LLAPRFile is short lived).
      
      ***
      
      Addressed Boroondas remarks in https://codereview.secondlife.com/r/99/
      regarding (doxygen) comments. This patch effectively only changes comments.
      
      Includes some 'merge' stuff that ended up in llvocache.cpp
      (while starting as a bug fix, now only resulting in a cleanup).
      
      ***
      
      Added comment 'The use of apr_pool_t is OK here'.
      
      Added this comment on every line where apr_pool_t
      is correctly being used.
      
      This should make it easier to spot (future) errors
      where someone started to use apr_pool_t; you can
      just grep all sources for 'apr_pool_t' and immediately
      see where it's being used while LLAPRPool should
      have been used.
      
      Note that merging this patch is very easy:
      If there are no other uses of apr_pool_t in the code
      (one grep) and it compiles, then it will work.
      
      ***
      
      Second Merge (needed to remove 'delete mCreationMutex'
      from LLImageDecodeThread::~LLImageDecodeThread).
      
      ***
      
      Added back #include <apr_pools.h>.
      
      Apparently that is needed on libapr version 1.2.8.,
      the version used by Linden Lab, for calls to
      apr_queue_*. This is a bug in libapr (we also
      include <apr_queue.h>, that is fixed in (at least) 1.3.7.
      
      Note that 1.2.8 is VERY old. Even 1.3.x is old.
      
      ***
      
      License fixes (GPL -> LGPL). And typo in comments.
      Addresses merov's comments on the review board.
      
      ***
      
      Added Merov's compile fixes for windows.
      ef490e30
  12. Oct 13, 2010
  13. Sep 21, 2010
  14. Aug 13, 2010
  15. Mar 04, 2010
  16. Nov 06, 2009
  17. May 22, 2009
    • Brad Kittenbrink's avatar
      DEV-27646 dll linkage for login module. · 01d39082
      Brad Kittenbrink authored
      Ok, finally got this to a point where it doesn't break the build and I can check
      in. llcommon can be built as a shared library (disabled but can be enabled with
      cmake cache var LLCOMMON_LINK_SHARED.
      
      reviewed by Mani on tuesday (I still need to get his suggested changes
      re-reviewed)
      01d39082
  18. Feb 18, 2009
  19. Jan 07, 2009
  20. Jun 27, 2008
  21. Oct 04, 2007
  22. Apr 02, 2007
  23. Mar 02, 2007
  24. Jan 02, 2007
Loading