1. 05 May, 2017 6 commits
    • Eric Niebler's avatar
      FixedString gets comparisons with folly::Range and hence with std::string · 90230f14
      Eric Niebler authored
      Summary: It should be possible to perform simple comparison operations between a FixedString and a std::string. By adding asymmetric comparison operators with FixedString and Range, we make FixedString comparable with anything convertible to Range, including std::string.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5007704
      
      fbshipit-source-id: fee89d8807ac2d5378eec0d0a51eb8684976a271
      90230f14
    • Christopher Dykes's avatar
      Fix getCurrentThreadName() on OSX · 0917b8bd
      Christopher Dykes authored
      Summary: OSX was sad. Now it should be happy.
      
      Reviewed By: mzlee
      
      Differential Revision: D5011751
      
      fbshipit-source-id: 77f22ff461036d8530d8f650396d8e12503448e7
      0917b8bd
    • Yedidya Feldblum's avatar
      Control the number of threads in TestExecutor · 0eff88b3
      Yedidya Feldblum authored
      Summary:
      [Folly] Control the number of threads in `TestExecutor`.
      
      Let the caller control the number of threads to use in each given case.
      
      Reviewed By: spacedentist
      
      Differential Revision: D4999699
      
      fbshipit-source-id: 4acf68cf17fbca14f0779daf0268d54c5606e4a8
      0eff88b3
    • Sven Over's avatar
      Future: improve test with task discarding executors · 3703b1b0
      Sven Over authored
      Summary:
      We have tests that check that the Future implementation deals
      cleanly with executors discarding tasks. The existing tests destroy
      the tasks immediately when they are passed to Executor::add. This
      diff adds corresponding tests for the scenario where the task is
      not destroyed right away, but after the call to Future::then has
      completed.
      
      This diff also adds a mechanism to detect that the passed callback
      function is actually destroyed. We have tested already that the
      promise returned by folly::then will be set to a BrokenPromise
      exception when the executor discards the task. However, the task
      passed to the executor is not only the callback we pass to
      folly::then, as the Future implementation wraps it with some code
      that stores the return value in a Promise. Existing tests check
      that this Promise is destroyed. The added mechanism in this diff
      checks that the orignal callback function itself gets destroyed.
      
      Reviewed By: Krigpl
      
      Differential Revision: D5002100
      
      fbshipit-source-id: 4155f61b075d9fe8d1869ad229f4d350571ff4c6
      3703b1b0
    • Yedidya Feldblum's avatar
      Add full noexcept annotations to Indestructible · c484e2ca
      Yedidya Feldblum authored
      Summary:
      [Folly] Add full `noexcept` annotations to `Indestructible`.
      
      And do it without requiring `<type_traits>`.
      
      Reviewed By: Orvid
      
      Differential Revision: D4999243
      
      fbshipit-source-id: f3521237ef4d03d2b187e9ebd6d0c90887872c42
      c484e2ca
    • Christopher Dykes's avatar
      Delete operator=(std::string&&) from StringPiece · 1c86749b
      Christopher Dykes authored
      Summary: This can only ever be used unsafely, so delete it.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4951294
      
      fbshipit-source-id: bbc266d1550fceb48946c7c48e76af07292b4a53
      1c86749b
  2. 04 May, 2017 4 commits
    • Christopher Dykes's avatar
      Support naming a ScopedEventBaseThread · cf05856c
      Christopher Dykes authored
      Summary:
      The setThreadName API is in the process of being changed to not accept a thread id, which means the thread itself needs to set the name.
      There are times where a `ScopedEventBaseThread` needs to be named, and this makes that possible.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4916781
      
      fbshipit-source-id: dab05b520a715183ce069151ed16864fa1331abc
      cf05856c
    • Christopher Dykes's avatar
      Add support for getting the current thread's name · 5cef863e
      Christopher Dykes authored
      Summary: It's primarily for use in testing, but is useful for log output as well.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4943072
      
      fbshipit-source-id: 0ca259d6c90f439e733a6179e7cba85dcd1ec9e7
      5cef863e
    • Maged Michael's avatar
      Add thread-safe priority queue with arbitrary priorities using flat combining · 223ef4eb
      Maged Michael authored
      Summary: This template uses flat combining and takes any sequential priority queue implementation that supports the `std::priority_queue` interface (`empty()`, `size()`, `push()`, `top()`, `pop()`) and any lock that meets the standard //Lockable// requirements to implement a thread-safe priority queue that supports arbitrary priorities. The template supports both unbounded and bounded size, and blocking, non-blocking, and timed variants of push, pop, and peek operations.
      
      Reviewed By: djwatson
      
      Differential Revision: D4873602
      
      fbshipit-source-id: 96e1548b4f7427ecd2ee2ead7a19993df4441b33
      223ef4eb
    • Eric Niebler's avatar
      test the typeid of the exception before it is potentially moved · 5947e778
      Eric Niebler authored
      Summary: Access the RTTI of the incomming exception before it is potentially moved from when testing for slicing
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4999189
      
      fbshipit-source-id: 3e6c0a9f10a27810484330e9b37a5b0ec450ff88
      5947e778
  3. 03 May, 2017 9 commits
    • Aravind Anbudurai's avatar
      Helper utility to construct, returns an Expected<..> · 919d544e
      Aravind Anbudurai authored
      Summary:
      folly::File's throwing constructor results in many try-catches in the callsites
      or bugs where the exception is not caught.
      
      This is a helper method to return an Expected with system_error wrapped into an
      exception_wrapper.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4995702
      
      fbshipit-source-id: be0e22b37c21c35bf157ada598916b05dfd32631
      919d544e
    • Giuseppe Ottaviano's avatar
      Store pointers in EliasFanoReader and BitVectorReader only if quantum > 0 · 6f027b29
      Giuseppe Ottaviano authored
      Summary:
      No need to store the pointers to forward and skip arrays if
      they're not used.
      
      Reviewed By: luciang
      
      Differential Revision: D4977014
      
      fbshipit-source-id: 2ed13fdcd1561da1a294f5895f3a5e1b77f1701c
      6f027b29
    • Giuseppe Ottaviano's avatar
      Template EliasFanoReader on size type · 121ecb47
      Giuseppe Ottaviano authored
      Summary: Shrink the reader type if less than 64 bits are sufficient for sizes. Do the same for `BitVectorCoding`, where we don't need an extra template parameter because the size is limited by the value domain.
      
      Reviewed By: philippv, luciang
      
      Differential Revision: D4976756
      
      fbshipit-source-id: 685047da81a556d049fb924c612f99cea3056a82
      121ecb47
    • Giuseppe Ottaviano's avatar
      Do not store inner_ in EliasFanoReader and BitVectorReader · 71ca4d5e
      Giuseppe Ottaviano authored
      Summary: It is not used anywhere except for `previousValue`, but there it can be computed from the other fields. This reduces the `EliasFanoReader` size by 8 bytes.
      
      Reviewed By: philippv, yfeldblum
      
      Differential Revision: D4976704
      
      fbshipit-source-id: 62bc63248b66649e483b59cb9ddf48dfd2c0e992
      71ca4d5e
    • Giuseppe Ottaviano's avatar
      Do not store the lower bits mask in EliasFanoReader · 0b988b15
      Giuseppe Ottaviano authored
      Summary:
      Computing the mask on access has negligible cost as it can be
      hoisted out of the linear search loop, and furthermore on Haswell we
      can use the the `BZHI` instruction.
      
      I also experimented with `BEXTR` but it ended up being slower because
      computing the pattern operand requires a shift and an or (it's
      probably meant for when the pattern is precomputed).
      
      Reviewed By: philippv
      
      Differential Revision: D4976657
      
      fbshipit-source-id: e4c4ca5f0a785595587e6d6ad4676f5b216291cf
      0b988b15
    • Dave Watson's avatar
      Domain destruction fixes · 90c8861c
      Dave Watson authored
      Summary:
      If a retired object's destructor retire()s other hazard pointers, currently
      these are not cleaned up correctly when the domain destructs.
      
      Retired pointers must be cleaned up before destroying hazptr_recs, and must be done
      iteratively until no more garbage is generated.
      
      Reviewed By: magedm
      
      Differential Revision: D4987333
      
      fbshipit-source-id: bcdd61abb47caca0892a8c4dbb864d17d4f2fa30
      90c8861c
    • Christopher Dykes's avatar
      Fix a couple of issues with the CMake script · c2e28878
      Christopher Dykes authored
      Summary:
      The first issue is that I was missing a `G` in `LIBGFLAGS_INCLUDE_DIR` meaning that it always claimed it couldn't find gflags even though it did, and worked just fine anyways.
      The second issue is that it was passing `/permissive-` to MSVC 2015 builds, even though MSVC 2015 doesn't support the permissive flag.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4988813
      
      fbshipit-source-id: f1ea009226baee54032409ce7add3c41f1fe7a19
      c2e28878
    • Christopher Dykes's avatar
      Fix compiling with PThread support on Windows... Again... · 58a70372
      Christopher Dykes authored
      Summary: I was bad and didn't follow through on my previous test plan, and so didn't check that it completely fixed the issue, instead only fixing one of the two problems. This fixes the other one.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4988408
      
      fbshipit-source-id: 44389bc67bcb7d6db984075f3600948460fa8c5a
      58a70372
    • Christopher Dykes's avatar
      Fix ExceptionWrapper under MSVC 2015 Update 3 · 59c1b560
      Christopher Dykes authored
      Summary: Besides this code being utterly bizzare, it doesn't work under MSVC 2015 Update 3, so rather than doing a `static_cast<bool>(std::conjunction<>())` just do `std::conjunction<>::value`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4988341
      
      fbshipit-source-id: ededdbf3f3d945d9e2f140f4e87643ec3c0d4239
      59c1b560
  4. 02 May, 2017 3 commits
    • Christopher Dykes's avatar
      Fix FBString in MSVC 2015 · 5e8852c8
      Christopher Dykes authored
      Summary: MSVC 2015 Update 3 is even worse in this particular case, and requires it to be explicitly referenced as being within the `folly` namespace >_>...
      
      Reviewed By: ot, yfeldblum
      
      Differential Revision: D4988025
      
      fbshipit-source-id: dea311dd42f40b442951b8df3c5f68cf70d13769
      5e8852c8
    • Christopher Dykes's avatar
      Fix the CMake build on Windows when using PThreads · 6a7b70f8
      Christopher Dykes authored
      Summary: I broke things, so now I have to fix them.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4981674
      
      fbshipit-source-id: 7df4d78cf4f984df158051a3a8b277a0bcad583b
      6a7b70f8
    • Christopher Dykes's avatar
      Fix FBString under MSVC · 24c892da
      Christopher Dykes authored
      Summary: MSVC requires the declaration to match a bit closer than GCC does.
      
      Reviewed By: yfeldblum, ot
      
      Differential Revision: D4981404
      
      fbshipit-source-id: 92ee40c40f66725c09a3087e49d99ebae222c2f2
      24c892da
  5. 01 May, 2017 2 commits
    • Andrii Grynenko's avatar
      Fix a race in Observable context destruction · 2642bd3d
      Andrii Grynenko authored
      Summary: In the subscribe callback It's possible that we lock the Context shared_ptr and while update is running, all other shared_ptr's are released. This will result in Context to be destroyed from the wrong thread (thread runnning subcribe callback), which is not desired.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4964605
      
      fbshipit-source-id: 285327a6873ccb7393fa3067ba7e612c29dbc454
      2642bd3d
    • Anirudh Ramachandran's avatar
      More OpenSSL 1.1.0 compatibility fixes · 79cb7776
      Anirudh Ramachandran authored
      Summary: A bunch of changes to make fbcode targets build with OpenSSL 1.1.0
      
      Reviewed By: ivmaykov
      
      Differential Revision: D4949822
      
      fbshipit-source-id: 35eda632d8335c4194352196264afeff69d87519
      79cb7776
  6. 30 Apr, 2017 1 commit
  7. 28 Apr, 2017 1 commit
    • Alexey Spiridonov's avatar
      Simplify BackgroundThreads, move them to folly/experimental/ThreadedRepeatingFunctionRunner · b7a0f26d
      Alexey Spiridonov authored
      Summary:
      - `FunctionScheduler` and `EventBase` are great for sharing one thread for many functions, but one-function-per-thread is messy.
      - Both of those implementations are complicated, but `FunctionThreads` is dead-simple.
      - I made it even simpler by eliminating the former `incrementalSleep` in favor of `std::future::wait_for`, which allows instant interruption without a tweakable param. h/t aru777 for suggesting `std::future` instead of `std::condition_variable`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4742134
      
      fbshipit-source-id: b520bbcd5f218b2276200ffe8926722ae8a8d6ca
      b7a0f26d
  8. 27 Apr, 2017 6 commits
    • Giuseppe Ottaviano's avatar
      Fix a comment · d5a49339
      Giuseppe Ottaviano authored
      Reviewed By: yfeldblum
      
      Differential Revision: D4965608
      
      fbshipit-source-id: db8d67ca7174e0296fbd8da2e1fe90cbbcef9496
      d5a49339
    • Philipp Unterbrunner's avatar
      folly::rvalue_reference_wrapper for store&forward of rvalue references · 682dfa71
      Philipp Unterbrunner authored
      Summary:
      Class template that wraps a reference to an rvalue. Similar to std::reference_wrapper but with three important differences:
      1) folly::rvalue_reference_wrappers can only be moved, not copied;
      2) the get() function and the conversion-to-T operator are destructive and not const, they invalidate the wrapper;
      3) the constructor-from-T is explicit.
      These restrictions are designed to make it harder to accidentally create a a dangling rvalue reference, or to use an rvalue reference multiple times. (Using an rvalue reference typically implies invalidation of the target object, such as move-assignment to another object.)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4931483
      
      fbshipit-source-id: 68453553bf4656ec41976699669a4491fcab79c9
      682dfa71
    • Philip Pronin's avatar
      fix silent eax clobbering in CpuId ctor · 95209f9d
      Philip Pronin authored
      Summary:
      `cpuid` uses all of `eax`, `ebx`, `ecx`, `edx` for output, but we
      aren't providing such information to GCC in a couple of cases, which might
      result in incorrect code being produced;
      
      GCC (unlike clang) doesn't allow the same register to appear both in input and
      clobber list, so put `eax` into output list where required.
      
      Reviewed By: ot, lbrandy
      
      Differential Revision: D4961841
      
      fbshipit-source-id: 07ca1977373496bfd794d3b0c8a4ba21333820e4
      95209f9d
    • Otto Ebeling's avatar
      Don't return a nullptr from IOBufQueue::split(0) · af5ed37b
      Otto Ebeling authored
      Summary: There's a gotcha case for IOBufQueue::split when  n==0, it will then return an unique_ptr wrapping a nullptr, which many call sites do not expect.
      
      Reviewed By: meyering
      
      Differential Revision: D4868228
      
      fbshipit-source-id: 418256dba8ca3bcfbae420b6099baa240055b9bb
      af5ed37b
    • Maged Michael's avatar
      Flat combining: Add lock holder with deferred option. Minor fixes. · b73507bb
      Maged Michael authored
      Summary: Added a lock holder with deferred option for cases where the caller may want to call try_lock() later.
      
      Reviewed By: djwatson
      
      Differential Revision: D4949736
      
      fbshipit-source-id: 31e0dc349dc3af9d04a33878e26cef1e48cce674
      b73507bb
    • Yedidya Feldblum's avatar
      Casing consistency for exception_wrapper::throw_exception · d2efd810
      Yedidya Feldblum authored
      Summary: [Folly] Casing consistency for `exception_wrapper::throw_exception`.
      
      Reviewed By: Orvid
      
      Differential Revision: D4944818
      
      fbshipit-source-id: 72056fb24ab6362e9a0319f73b5bbf8c92d658ca
      d2efd810
  9. 26 Apr, 2017 5 commits
    • Pavel Aslanov's avatar
      folly::overload and folly::variant_match · 7d06adb4
      Pavel Aslanov authored
      Summary: Pattern matching like functionality for boost::vairant. See unittests for usage examples.
      
      Reviewed By: yfeldblum, ericniebler
      
      Differential Revision: D4851133
      
      fbshipit-source-id: cda7dc766dac5870bcc4ab1859de0e4e7f0a6599
      7d06adb4
    • Nick Terrell's avatar
      small_vector improvements · 0ef8ce0d
      Nick Terrell authored
      Summary:
      1. `emplace_back()` is broken when there are at least two arguments and one is a reference to inside the vector. See the `ForwardingEmplaceInsideVector` test.
      2. Only `push_back(value_type&&)` did exponential growth, every other function grew linearly. The bug is hidden inside of facebook because `goodMallocSize()` grows fast enough to not be horribly slow. When not using jemalloc, it will grow one element at a time.
      3. `push_back(value_type const& t)` performed a copy and a move on `t` when `size() == capacity()`. Remove the extra move.
      
      Fixes https://github.com/facebook/folly/issues/541.
      
      Reviewed By: luciang
      
      Differential Revision: D4875084
      
      fbshipit-source-id: eefa76028c6bfd9d7c73af65e8bb9d4baf49b8cb
      0ef8ce0d
    • Dave Watson's avatar
      Make folly pass TSAN checks · a0c640e8
      Dave Watson authored
      Summary:
      Currently, contbuild has a blanket TSAN suppression for folly.
      Fix PicoSpinLock instead
      
      This should fix TSAN errors as an alternative to D4781776
      
      Some of the tests even had TSAN errors, fixed those.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D4795284
      
      fbshipit-source-id: 9f0fc6868399da2f86be355ce3c081990260a649
      a0c640e8
    • Dave Watson's avatar
      Fix virtual struct bug · 92f554a5
      Dave Watson authored
      Summary: virtual classes currently don't work in hazard pointers, and get incorrectly reclaimed.
      
      Reviewed By: magedm
      
      Differential Revision: D4951584
      
      fbshipit-source-id: 8200df6bb8d500af2e89086edf7835d4fb90b6a2
      92f554a5
    • Christopher Dykes's avatar
      Delete the non-char integeral forms of fbstring::operator= · ce979260
      Christopher Dykes authored
      Summary: They allow for assignments that make no sense, so make it impossible to do so.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4919606
      
      fbshipit-source-id: 24d8e036eff33a8c6def4672c0d098f0edd5c5b3
      ce979260
  10. 25 Apr, 2017 3 commits
    • Neel Goyal's avatar
      Guard SSLContext lock checks with init mutex and add setSSLLockTypesAndInitOpenSSL · 5699919f
      Neel Goyal authored
      Summary:
      Improve concurrency guards for `setSSLLockTypes` and `isSSLLockDisabled` by using initMutex.  Also verify that openssl has been initialized w/ DCHECK in isSSLLockDisabled.
      
      We also add a method to do the setting of locks and initialization in one shot.
      
      Reviewed By: knekritz
      
      Differential Revision: D4937242
      
      fbshipit-source-id: 308f516c17485281604d4322954c09beb58688e2
      5699919f
    • Andrii Grynenko's avatar
      Remove thread-safety comment from EventBaseLocal · 2c371199
      Andrii Grynenko authored
      Reviewed By: vitaut
      
      Differential Revision: D4940976
      
      fbshipit-source-id: 0c4ebf8f358e6f54a7b5e81f2e73649b030006c9
      2c371199
    • Christopher Dykes's avatar
      Shift the implementation of setThreadName out of the header · 6bfd09a8
      Christopher Dykes authored
      Summary:
      `folly::setThreadName` is neither performance critical, nor (after this diff) is it a template, so exposing the mess that is its implementation to the world isn't worth it.
      The implementation is expected to get even more messy as I add support for getting the current thread's name, and eventually also add support for Windows as well.
      
      This also required exposing whether the current platform supports setting the name of the current or other threads.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4942401
      
      fbshipit-source-id: 0e3be203995fa6ed667a5fd28dac7ba7fa49d683
      6bfd09a8