1. 25 Feb, 2017 1 commit
    • Michael Lee's avatar
      Fix -Wshadow warning in sorted_vector_types · 29deb3cf
      Michael Lee authored
      Summary: `last` was already passed in as a variable, so switch this so there isn't a local variable at all.
      
      Reviewed By: mlogan, yfeldblum
      
      Differential Revision: D4615206
      
      fbshipit-source-id: dd8e3157e54dc2abe3dfd97837ce327371f4f7b2
      29deb3cf
  2. 24 Feb, 2017 2 commits
    • Yedidya Feldblum's avatar
      Drop support for gcc 4.7 with byteswap shim · 80430673
      Yedidya Feldblum authored
      Summary: [Folly] Drop support for gcc 4.7 with byteswap shim
      
      Reviewed By: igorsugak, Orvid
      
      Differential Revision: D4610746
      
      fbshipit-source-id: 092cd432c7bda9ca5507d0230b6fcaa43b96c500
      80430673
    • Giuseppe Ottaviano's avatar
      Fix a corner case in EliasFanoReader::previousValue · e639eac2
      Giuseppe Ottaviano authored
      Summary:
      `previousValue` makes the incorrect assumption that `outer_`
      is a multiple of the word size. This is incorrect because `skipToNext`
      can reposition at an arbitrary point.
      
      The bug is very rare because it can only happen if there is a gap
      larger than the skip quantum after the first element in the upper
      bits.
      
      Reviewed By: philippv
      
      Differential Revision: D4607270
      
      fbshipit-source-id: ff016f09f3f1f87314b68370e3dc137b82694f45
      e639eac2
  3. 23 Feb, 2017 1 commit
    • Mark Logan's avatar
      Remove duplicates during bulk insertion. · 3900132e
      Mark Logan authored
      Summary:
      antonl noticed that bulk_insert doesn't remove duplicates.
      We now run a std::unique() pass after merging.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4595304
      
      fbshipit-source-id: 538364150aeea64b95488da158c09e07a6597e7c
      3900132e
  4. 21 Feb, 2017 1 commit
  5. 20 Feb, 2017 1 commit
    • Mark Williams's avatar
      Prevent a crash in folly::Symbolizer · ae910818
      Mark Williams authored
      Summary:
      dbg and dbgo builds of hhvm with gcc-5 crash when generating
      backtraces using folly::Symbolizer, because the .debug_aranges for
      libc-2.23.so are SHF_COMPRESSED, and folly::Symbolizer doesn't
      recognize that.
      
      Just pretend that the section doesn't exist if it has SHF_COMPRESSED
      set.
      
      We might eventually want to support decompressing such sections under
      an option - but folly::Symbolizer's goal is to just mmap and walk the
      debug info without allocating memory (so that it can run while
      handling signals etc).
      
      Reviewed By: pixelb
      
      Differential Revision: D4586762
      
      fbshipit-source-id: bef61ed670d1a80caa4f7aac1f80fd2a92cc4ba9
      ae910818
  6. 17 Feb, 2017 2 commits
    • Maged Michael's avatar
      Add Baton variants with multiple posters and with a non-blocking waiter · f795d501
      Maged Michael authored
      Summary:
      Added two variants of Baton by adding two Boolean template parameters with defaults that correspond to the original single poster blocking waiter version:
      - SinglePoster (single poster vs multiple posters). Default true.
      - Blocking (vs spinning). Default true.
      
      The multi-poster baton (SinglePoster = false) can be handed over by multiple concurrent posters, where redundant post()-s are idempotent but if a post() arrives after the baton is reset() then it unblocks the waiter.
      
      The nonblocking Baton (Blocking = false) has faster common case post(), by avoiding CAS in the critical path. It does so by disallowing waiter blocking and timed_wait().
      
      Reviewed By: nbronson
      
      Differential Revision: D4506728
      
      fbshipit-source-id: e5b65ad93e443fbba22164319c985ebc8424554a
      f795d501
    • Yedidya Feldblum's avatar
      Fix exception_wrapper::throwException when called before main · 05499631
      Yedidya Feldblum authored
      Summary:
      [Folly] Fix `exception_wrapper::throwException` when called before `main`.
      
      When the `exception_wrapper` is empty, then `throwException` emits a message to `std::cerr` and terminates. If called before `main` begins or after `main` ends, then `std::cerr` might not have been constructed yet or might have already been destructed. Bad. Segfault, etc. So we need to ensure that `std::cerr` is alive by holding an instance of `std::ios_base::Init`.
      
      Reviewed By: Orvid
      
      Differential Revision: D4576190
      
      fbshipit-source-id: dd84b5e82eb6bd817d405baf530714e0f4c314c5
      05499631
  7. 16 Feb, 2017 6 commits
    • Yedidya Feldblum's avatar
      Drop support for Clang < 3.9 · 1d804f03
      Yedidya Feldblum authored
      Summary: [Folly] Drop support for Clang < 3.9.
      
      Reviewed By: igorsugak
      
      Differential Revision: D4567233
      
      fbshipit-source-id: cd94c711f0390d249b6736ab292721a477022b02
      1d804f03
    • Christopher Dykes's avatar
      Workaround MSVC 2015 limitations in Traits.h · 1a8db4b8
      Christopher Dykes authored
      Summary: MSVC 2015 has issues with templated `using` declarations using `decltype`, so adjust the definition to use constexpr evaluation to fill a template parameter of a base type instead.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4510155
      
      fbshipit-source-id: cc2e33625b515085dff4e682971299810905fef0
      1a8db4b8
    • Christopher Dykes's avatar
      Adjust a few things to avoid triggering warnings under MSVC · dfc2add7
      Christopher Dykes authored
      Summary: This includes both unused parameters (W4100) and conditional expression is constant (W4127).
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4525057
      
      fbshipit-source-id: 7c057dbe239d02fa2e3ce96373d53814591994ec
      dfc2add7
    • Christopher Dykes's avatar
      Use std::this_thread::yield rather than sched_yield · 79b78eaa
      Christopher Dykes authored
      Summary: They do the same thing, and the first is portable.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4569649
      
      fbshipit-source-id: db0434766f674a7789d6e59335e122b4d2131e06
      79b78eaa
    • Maged Michael's avatar
      Fix data race in Futex<EmulatedFutexAtomic> · eab7000d
      Maged Michael authored
      Summary: Fixed a data race between an atomic store by the waker and a nonatomic memcpy by the waiter.
      
      Reviewed By: nbronson
      
      Differential Revision: D4572410
      
      fbshipit-source-id: 3982ca433e0f628636916516e35aeb7738ae030f
      eab7000d
    • Lovro Puzar's avatar
      Add AtomicIntrusiveLinkedList::reverseSweep() · f54a0bdb
      Lovro Puzar authored
      Summary: In D4558451 I want to pull elements off an atomic list onto a thread-local (single-consumer) vector and pop to get elements in insertion order.  A sweep that provides elements in LIFO order will avoid a redundant pair of list reversals.
      
      Reviewed By: nbronson
      
      Differential Revision: D4564816
      
      fbshipit-source-id: 38cf50418e6afe0be3eec96ce85d571c65f06d7e
      f54a0bdb
  8. 15 Feb, 2017 3 commits
    • Philip Pronin's avatar
      optimize EliasFanoEncoder::defaultNumLowerBits · b49a44c4
      Philip Pronin authored
      Summary:
      `defaultNumLowerBits` is heavily used during PL encoding with
      optimally-partitioned EF. This diff improves its performance by 3.5x by
      avoiding expensive 64-bit division.
      
      Reviewed By: ot, luciang
      
      Differential Revision: D4564615
      
      fbshipit-source-id: 4521d3c05f19573cd2c84f702fcfeaace5f98e77
      b49a44c4
    • Phil Willoughby's avatar
      Replace the future-splitting system · bb76b0f7
      Phil Willoughby authored
      Summary:
      The previous mechanism in SharedPromise doesn't work if the lifetime of the
      SharedPromise object ends before the Future which it was splitting is
      completed.
      
      This variation on the same theme doesn't have that problem.
      
      Reviewed By: spacedentist
      
      Differential Revision: D4339670
      
      fbshipit-source-id: f619762bff1390481715575b3e638ec26b5c4edd
      bb76b0f7
    • Anton Likhtarov's avatar
      Fix undefined behaviour · 1ce2015a
      Anton Likhtarov authored
      Summary: memcpy's src cannot be nullptr even if the size is 0.
      
      Reviewed By: djwatson
      
      Differential Revision: D4560100
      
      fbshipit-source-id: 37cd3ed73f902a136f711a5c1a918258f94d1063
      1ce2015a
  9. 14 Feb, 2017 2 commits
  10. 11 Feb, 2017 1 commit
    • Adam Simpkins's avatar
      add Range constructors from std::array · 60b6e844
      Adam Simpkins authored
      Summary:
      Add explicit constructors to create Range objects referring to the contents of
      a std::array.
      
      D4165608 previously added a folly::range() factory function to create Ranges
      around const arrays.  However, it did not support non-const arrays.  However,
      providing this as a constructor seems better.  This new constructor does not
      appear ambiguous with any existing constructors, and a constructor allows for
      more natural support of non-const arrays: the caller can explicitly indicate
      if they want to construct a Range to const or non-const data in this case.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4523515
      
      fbshipit-source-id: c1a262f9e8f76907d87d80b03f252576506e70ab
      60b6e844
  11. 10 Feb, 2017 3 commits
    • Andrii Grynenko's avatar
      Minor GDB script fix · e1a26ff9
      Andrii Grynenko authored
      Reviewed By: lbrandy
      
      Differential Revision: D4544705
      
      fbshipit-source-id: d60f2026d31c94e020df51f8c887b995986ddcd7
      e1a26ff9
    • Jack Montgomery's avatar
      changed Synchronized.md to reflect SharedMutex as default · 78443c5a
      Jack Montgomery authored
      Summary: folly/docs/Synchronized.md now reflects the fact that SharedMutex is default mutex for Synchronized
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4529851
      
      fbshipit-source-id: b3b8eafe908ba92e3629392fbc4b856b5a99b658
      78443c5a
    • Andrew Krieger's avatar
      Detect identity conversion in toDynamic · 6e4f4207
      Andrew Krieger authored
      Summary:
      D4499520 added typedefs to `dynamic` which made it start matching
      tests for ranges/containers. However, the typedefs are unconditional on the
      actual contents of the `dynamic`. This made toDynamic(dynamic) select the
      range-based conversion operator, always, which immediately asserts when
      trying to do range-based iteration over an Object or a primitive. Add tests
      to the converters that enable/disable depending on whether the object is
      already a `dynamic` and early-out in that case.
      
      Reviewed By: mzlee
      
      Differential Revision: D4538617
      
      fbshipit-source-id: f3a5aafab07946a221dcead782fc27de51afa0a6
      6e4f4207
  12. 09 Feb, 2017 4 commits
    • Den Raskovalov's avatar
      add folly:hasher<bool> · 3751f5de
      Den Raskovalov authored
      Summary:
      hasher<bool> is a trivial thing, but it is useful, if we implement a hash function for a class by writing something like:
        return folly::Hash()(boolField1_, boolField2_, intField3_, boolField4_, someField5_)
      
      Reviewed By: ot
      
      Differential Revision: D4535563
      
      fbshipit-source-id: 5e6672c2eeaebbbac80a8a066a6a0ec4838810f4
      3751f5de
    • Andrii Grynenko's avatar
      Add keepAlive() mechanism · 53367378
      Andrii Grynenko authored
      Summary:
      EventBase and VirtualEventBase already had a loopKeepAlive() mechanism, which enabled libraries to prevent EventBase/VirtualEventBase from being destroyed until all keep-alive tokens were released.
      
      This change adds generic keepAlive() support into folly::Executor. folly::Executors which don't support keep-alive mechanism yet, will just return a no-op KeepAlive token.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4516649
      
      fbshipit-source-id: 869779621c746cb14d985aa73bc4536859914c03
      53367378
    • Phil Willoughby's avatar
      Benchmark string copying via the formatter · cfe87b2e
      Phil Willoughby authored
      Summary:
      Using the formatter is always much slower than using the copy constructor (News at 11).
      
      Comparing the two idioms for formatting out a single string input:
      * the unsafe method (`format(theString)`) is (annoyingly) fastest for small strings; probably because cache-hits dominate the need to inspect every character to see if it is `{` or `}`
      * the safe method (`format("{}",theString)`) is fastest on large strings (crossover at roughly 256 bytes)
      * there isn't a lot in it between 64 and 512 bytes.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4423088
      
      fbshipit-source-id: 7f8590653ab33fe62887a506ea79a43989fbfb29
      cfe87b2e
    • Andrew Krieger's avatar
      Non-const `dynamic` iterators · 73182f6e
      Andrew Krieger authored
      Summary:
      Add non-const iterators corresponding to existing iterator types
      where it makes sense.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4499520
      
      fbshipit-source-id: dc4ec583d3da1c6701805b30b25389fbf9311a7c
      73182f6e
  13. 08 Feb, 2017 2 commits
    • Sebastian Messmer's avatar
      Specialise std::hash for folly::Optional · c141f6ec
      Sebastian Messmer authored
      Summary: This allows using folly::Optional<T> in std::unordered_map and std::unordered_set.
      
      Reviewed By: luciang
      
      Differential Revision: D4469938
      
      fbshipit-source-id: b86b1a4510379b337e9de83471a4aafce6d5a6cb
      c141f6ec
    • Ameya Limaye's avatar
      Throw custom exception type when ABD fails a result because some other token did not call dispatch · bcbc4ff5
      Ameya Limaye authored
      Summary:
      Throw custom exception type when ABD fails a result because some other token did not call dispatch:
      - This is useful because the caller can catch this exception and discard it if they find some other exception
      - The custom exception does not give an indication of the problem. The other exception/s thrown will do that.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4395742
      
      fbshipit-source-id: be80f66b1297e9faf625a2fb087590a7d0a9335d
      bcbc4ff5
  14. 07 Feb, 2017 3 commits
    • Christopher Dykes's avatar
      Make a few coersions to bool explicit · 0e4a41d0
      Christopher Dykes authored
      Summary: MSVC has warning 4800 which is triggered on implicit coercions to `bool` when not in use as the condition to a control-flow statement.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4518465
      
      fbshipit-source-id: 858ab9e68215a2a667cb3ea55daf51b74368174d
      0e4a41d0
    • Phil Willoughby's avatar
      Modify BaseFormatter to help static analysers · 11505903
      Phil Willoughby authored
      Summary:
      This decouples the format-string-parser from the storage of the arguments to be
      formatted: a static analyser can now define a class which derives from
      `BaseFormatter` with no storage and use `BaseFormatter::operator()` to verify
      the syntax of the format string and determine which arguments will be
      referenced.
      
      This method of allowing overrides is resolved at compile time; the benchmarks
      confirm that there is no run-time difference.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4507689
      
      fbshipit-source-id: f109d81ae54dc074ac363720ef6e565520435d26
      11505903
    • Phil Willoughby's avatar
      Run clang-format over Format*.h · 9773e441
      Phil Willoughby authored
      Summary:
      Changes are planned, this will make it easier for the new code to look good
      without making the older code look weird.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4514839
      
      fbshipit-source-id: 43f8cd7d85901e1915cc434a0f4b5fd6bce1ec7a
      9773e441
  15. 06 Feb, 2017 2 commits
    • Christopher Dykes's avatar
      Support compiling in C++14 mode · 3259ce0e
      Christopher Dykes authored
      Summary:
      The rest of Folly isn't dependent on C++17 mode in MSVC, so modify this to support not having it enabled.
      This will make adoption easier as C++17 mode acts on the things the standard says are removed.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4509919
      
      fbshipit-source-id: f4644f5f5ba78de8ab5192b89ac6320767b51084
      3259ce0e
    • Sven Over's avatar
      execute callbacks as rvalue references · 8898db44
      Sven Over authored
      Summary:
      Callable objects may implement a separate `operator()` for when
      they are called as rvalue references. For example, `folly::partial`
      will move captured objects to the function call when invoked as
      rvalue reference. That allows e.g. to capture pass a `unique_ptr`
      to `folly::partial` for a function that takes a `unique_ptr` by
      value or rvalue-reference.
      
      Callbacks for `folly::Future`s are only ever executed once. They
      may consume captured data. If the callback is an object that
      implements a `operator()() &&`, then that one should be invoked.
      
      This diff makes sure, callbacks passed to `folly::Future` are
      invoked as rvalue references.
      
      Reviewed By: ericniebler, fugalh
      
      Differential Revision: D4404186
      
      fbshipit-source-id: 9f33e442a634acb8797183d3d869840d85bd5d15
      8898db44
  16. 04 Feb, 2017 2 commits
    • Andrey Ignatov's avatar
      Expose testing callbacks from AsyncSocketTest2. · ef2e3d4b
      Andrey Ignatov authored
      Summary:
      `TestConnectionEventCallback` and `TestAcceptCallback` are very handy and can
      be used in other tests outside folly. Specifically I'm going to use them in
      `ConnectHookTest`. It'll also allow to avoid copy/paste in `TransparentTlsTest`.
      
      Reviewed By: plapukhov
      
      Differential Revision: D4507461
      
      fbshipit-source-id: dfaa97e26036ebb11da17a53d4a73431a295f4d4
      ef2e3d4b
    • Matt Glazar's avatar
      Fix environ enumeration on Apple platforms · c847b1b4
      Matt Glazar authored
      Summary:
      environ is documented to not work very well from .dylib-s (dynamic libraries) on macOS. Use the _NSGetEnviron function instead to get a pointer to environ.
      
      <crt_externs.h> is missing from some iOS SDKs, so forward-declare _NSGetEnviron in such cases.
      
      Reviewed By: Orvid, mzlee
      
      Differential Revision: D4491044
      
      fbshipit-source-id: 886d19bdd63dea14225992446b7ba132faf35054
      c847b1b4
  17. 03 Feb, 2017 3 commits
    • Xuli Liu's avatar
      Expose more functions/constructors on BucketedTimeSeries · c10a6640
      Xuli Liu authored
      Summary: Currently BucketedTimeSeries does not expose enough functions to allow assessing its data, therefore there is no way to do serialization/deserialization. Adding functions/constructors to support this.
      
      Reviewed By: simpkins
      
      Differential Revision: D4500075
      
      fbshipit-source-id: 656ac8a208547d8d3fadf9ea150606b6e74775c9
      c10a6640
    • Mark Logan's avatar
      Add ContainerT&& ctors to sorted_vector_map and sorted_vector_set. · b90498bc
      Mark Logan authored
      Summary:
      Add ContainerT&& ctors to sorted_vector_map and sorted_vector_set,
      to support more efficient bulk-construction of these containers. With the
      prior constructors, the only way to do bulk-construction efficiently was
      by using the iterator constructors with a pre-sorted range. If you didn't
      have a presorted range, you would need to make a temporary container in
      order to get a sorted range. Repeatedly calling insert() without a sorted
      range is quadratic, hence not an option.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4491299
      
      fbshipit-source-id: 041c546578f44ee6928c5506e8d8191092143b12
      b90498bc
    • Mark Logan's avatar
      Fix worst-case quadratic behavior of iterator constructors and range insert() · 3ffcb010
      Mark Logan authored
      Summary:
      The iterator constructors and the range insert() method previously
      had quadratic runtime if given an unsorted range. This is now fixed. We
      append the entire range to the container, sort that subrange, and merge it
      into the already-sorted container. Sorting and merging is skipped when possible.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4493534
      
      fbshipit-source-id: e6d73b5c19e374001f9e340ff527c5257bef2ca3
      3ffcb010
  18. 02 Feb, 2017 1 commit
    • Pádraig Brady's avatar
      Fix build failure with GCC 5 · 30db459f
      Pádraig Brady authored
      Summary:
      GCC 5 doesn't recognize LOG(FATAL) as [[noreturn]],
      so remove [[noreturn]] to avoid that warning and build failure.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4484625
      
      fbshipit-source-id: ca129ca3a52239becd7d80f99107e64745bf8838
      30db459f