1. 14 Mar, 2018 8 commits
    • Nathan Bronson's avatar
      add __builtin_ctz and __builtin_ctzl · 9cf96558
      Nathan Bronson authored
      Summary: Add missing WIN32 compat builtins
      
      Reviewed By: Orvid
      
      Differential Revision: D7276240
      
      fbshipit-source-id: 094c0861126b3477e9112987f033edacbde4aca4
      9cf96558
    • Tom Jackson's avatar
      eachTryTo, takeWhile · 3c047a7b
      Tom Jackson authored
      Reviewed By: yfeldblum
      
      Differential Revision: D7257019
      
      fbshipit-source-id: 2fe54fe1d42bfe81b2f6f8e43ae0f7e738e93edd
      3c047a7b
    • Dave Watson's avatar
      Fix fork behavior · 608edf73
      Dave Watson authored
      Summary:
      hazptr_priv_list needs to be reinitialized on fork, as well as ODR violations.
      
      This broke stuff when trying to land D7164130
      
      TL;DR the thread_locals need to be in a .cpp file, the templates don't always get merged correctly, especially in the face of dlopen.
      
      You can, however, use a thread_local * pointer cache to the object.  This is basically what folly::SingletonThreadLocal does.
      
      Folly's ThreadLocal runs destructors when forking even too, so nothing special is required.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7256905
      
      fbshipit-source-id: c817167b5c3db27fa929feaa39295fd939c1cb4c
      608edf73
    • Xiao Shi's avatar
      lift Default{Hasher, KeyEqual, Alloc} out of detail namespace · bb5932ed
      Xiao Shi authored
      Summary:
      Expose the default structs in `folly::f14` namespace so that users _could_
      potentially refer to them.
      
      Reviewed By: nbronson
      
      Differential Revision: D7271846
      
      fbshipit-source-id: 81a193209e59ed80260098ed97c99a7b6f2ad151
      bb5932ed
    • Yedidya Feldblum's avatar
      Parameterize AlignedSysAllocator by a policy · d277c610
      Yedidya Feldblum authored
      Summary: [Folly] Parameterize `AlignedSysAllocator` by a policy.
      
      Reviewed By: ot
      
      Differential Revision: D7246946
      
      fbshipit-source-id: 5b6a89707c242e49bdbafba9dec6df4c65ef385c
      d277c610
    • Bennett Magy's avatar
      Added forward declaration of ObserverCreator · 2195ec35
      Bennett Magy authored
      Summary:
      For some reason, compilation of certain Observable code fails in opt mode with the error that Observer::core_ is private.
      
      It seems that ObserverCreator is not recognized as a friend of Observer. This forward declaration of ObserverCreator seems to fix this issue.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7268318
      
      fbshipit-source-id: 1ea76efb0f50cb8a6b28147305ec7547f55338b8
      2195ec35
    • Yedidya Feldblum's avatar
      Enable -Wunused-value · aab80ef3
      Yedidya Feldblum authored
      Summary: [Folly] Enable `-Wunused-value`.
      
      Reviewed By: Orvid
      
      Differential Revision: D7266246
      
      fbshipit-source-id: dc9b85a5f8ce67802cc2fa94746a26529012ec22
      aab80ef3
    • Nathan Bronson's avatar
      fix F14 MSVC build · 7fd46ef5
      Nathan Bronson authored
      Summary:
      F14 was missing the MSVC portability shims, and also needs to
      use an MSVC-specific intrinsic to get the high word of a 64-bit multiply.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7263349
      
      fbshipit-source-id: f47ceb2b2370d9bef1409e4790b236752c9f6ac4
      7fd46ef5
  2. 13 Mar, 2018 9 commits
    • Paul Jewell's avatar
      Allowing folly::dynamics of object/array type to be hashed · c391dc14
      Paul Jewell authored
      Summary:
      Currently, an error is thrown if a user tries to hash an instance of `folly::dynamic` which is of type `object` or `array`. Primitive underlying types are fine.
      
      There doesn't seem to be a strict reason for this, as objects and arrays are just as hashable as primitive types. Additionally, the inability to hash here causes some unnecessary drawbacks (e.g. interacting with `unordered_map`s).
      
      This diff uses the existing dependency on `folly/hash/Hash.h` to start allowing `folly::dynamic` objects/arrays to be hashed as well.
      
      Reviewed By: ot
      
      Differential Revision: D7219760
      
      fbshipit-source-id: 1dff3f99bdacb66f719c614040cbd668ce51a33e
      c391dc14
    • Fengyang Wang's avatar
      Make EventBase subclass IOExecutor (as in docstring) · 3b0fb5d6
      Fengyang Wang authored
      Summary: EventBase meets the definition of IOExecutor (it is an executor that "manages" at least one EventBase) and is already claimed to be one in the docstring.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7064481
      
      fbshipit-source-id: 026e0e4c24d6fb15a32bc4772b35689f830ed944
      3b0fb5d6
    • Lee Howes's avatar
      Add deferError to SemiFuture. · b5fcc4f9
      Lee Howes authored
      Summary: deferError adds an error handling callback to SemiFuture, enqueued on the internal deferred executor, and thus will run on the chained executor or inline with .get() as for defer.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7243193
      
      fbshipit-source-id: 9fe7dab9fbc8b236d717b058c81a303d87fa9253
      b5fcc4f9
    • Nathan Bronson's avatar
      F14 hash table in folly · 93d49bcf
      Nathan Bronson authored
      Summary:
      F14 is a 14-way probing hash table that resolves collisions by double
      hashing.  Up to 14 keys are stored in a chunk at a single hash table
      position.  SSE2 vector instructions are used to filter within a chunk;
      intra-chunk search takes only a handful of instructions.  "F14" refers
      to the fact that the algorithm "F"ilters up to "14" keys at a time.
      This strategy allows the hash table to be operated at a high maximum
      load factor (12/14) while still keeping probe chains very short.
      
      F14 provides compelling replacements for most of the hash tables we use in
      production at Facebook.  Switching to it can improve memory efficiency
      and performance at the same time.  The hash table implementations
      widely deployed in C++ at Facebook exist along a spectrum of space/time
      tradeoffs.  The fastest is the least memory efficient, and the most
      memory efficient is much slower than the rest.  F14 moves the curve,
      simultaneously improving memory efficiency and performance when compared
      to the existing algorithms, especially for complex keys and large maps.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7154343
      
      fbshipit-source-id: 42ebd11b353285855c0fed5dd4b3af4620d39e98
      93d49bcf
    • Lee Howes's avatar
      Separate Try-taking defer and value-taking deferValue in SemiFuture. · bf814b82
      Lee Howes authored
      Summary: This avoids ambiguity with an auto-parameterised lambda and leads on to a consistent use of deferError in a followup diff.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7224490
      
      fbshipit-source-id: df410cd97ca0991db8fcb46267dd6a4236f3f6a3
      bf814b82
    • Asier Gutierrez's avatar
      Missing SequencedExecutor.h · 387fc2ca
      Asier Gutierrez authored
      Summary:
      When compiling using autoconf, automake, make and make install, SequencedExecutor.h is not installed automatically.
      Closes https://github.com/facebook/folly/pull/799
      
      Reviewed By: meyering
      
      Differential Revision: D7241820
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 03c608c8ece2e7870a7bacce399ecc9455691948
      387fc2ca
    • Giuseppe Ottaviano's avatar
      Revert D7164130 · da674dc5
      Giuseppe Ottaviano authored
      Reviewed By: djwatson
      
      Differential Revision: D7251343
      
      fbshipit-source-id: e5ce0c897f0d96c8717d544ac98a1faf12f08c02
      da674dc5
    • Yedidya Feldblum's avatar
      Suppress -Wshadow-compatible-local in folly/test/stl_tests/StlVectorTest.cpp · 2e4740ed
      Yedidya Feldblum authored
      Summary:
      [Folly] Suppress `-Wshadow-compatible-local` in `folly/test/stl_tests/StlVectorTest.cpp`.
      
      That test source file is heavily macro-driven, and using `SCOPED_TRACE` repeatedly in macros can lead to violations of `-Wshadow-compatible-local`.
      
      Reviewed By: meyering
      
      Differential Revision: D7231029
      
      fbshipit-source-id: 122e1d86032cf884a83ef1716fa48b8f4864a363
      2e4740ed
    • Mingtao Yang's avatar
      SSLContext: Report error codes in hexadecimal. · 72eebc56
      Mingtao Yang authored
      Summary: For compatiblity with `openssl errstr`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7246053
      
      fbshipit-source-id: dcf77b67ae3b3dd7b6b85e9b73f2d382e59aa7b9
      72eebc56
  3. 12 Mar, 2018 6 commits
    • Dave Watson's avatar
      Add timed_wait · 5a500c70
      Dave Watson authored
      Summary:
      Add try_wait_for and try_wait_until.
      
      Algorithm -
      
      We could use a doubly-linked list, but this would double the number of contended
      CAS for push/post.  Instead, assume timeouts are infrequent, and just walk the list
      from the head to remove nodes.
      
      A lock bit is added to the head, which is taken only on timeout.  We assume
      timeouts are infrequent.
      
      If a concurrent post() removes the node before the timeout can remove it,
      we must wait for the corresponding post() (but it is likely to arrive soon),
      instead of timing out.
      
      Reviewed By: magedm
      
      Differential Revision: D7167894
      
      fbshipit-source-id: ea5242098d9ccd286a72fade6292223e95c44a81
      5a500c70
    • Dan Melnic's avatar
      Use unbounded queue in NotificationQueue · c9dd3e5e
      Dan Melnic authored
      Summary: Use unbounded queue in NotificationQueue
      
      Reviewed By: djwatson
      
      Differential Revision: D7164130
      
      fbshipit-source-id: d1b445d6730cbb2a68ad78506abe0165e28f5811
      c9dd3e5e
    • Dan Melnic's avatar
      Add folly::Optional<T> UnboundedQueue::try_dequeue() method · 8a14ddfa
      Dan Melnic authored
      Summary: Add folly::Optional<T> UnboundedQueue::try_dequeue() method
      
      Reviewed By: magedm
      
      Differential Revision: D7164049
      
      fbshipit-source-id: 659de2d26067bb1a5bdea50f4cd7711e6955ba61
      8a14ddfa
    • Dan Melnic's avatar
      NotificationQueue benchmark · 9b55b900
      Dan Melnic authored
      Summary: NotificationQueue benchmark
      
      Reviewed By: yfeldblum, djwatson
      
      Differential Revision: D7163944
      
      fbshipit-source-id: f7fe2124b8c61ff3ab39be94d9c50c82a6f8816b
      9b55b900
    • Yedidya Feldblum's avatar
      Fix propagate_const under gcc49 · 5fbd25bb
      Yedidya Feldblum authored
      Summary: [Folly] Fix `propagate_const` under gcc49.
      
      Reviewed By: andrewjcg
      
      Differential Revision: D7230851
      
      fbshipit-source-id: 0cd4df15d5a0f7ae06e26a82ca725b30d479f458
      5fbd25bb
    • Yedidya Feldblum's avatar
      Rewrite allocators for the era of std::allocator_traits · 0085c239
      Yedidya Feldblum authored
      Summary:
      [Folly] Rewrite allocators for the era of `std::allocator_traits`.
      
      Provide minimal interfaces which comply with all required elements of C++ concept `Allocator`. Change all (*) uses to use `std::allocator_traits` consistently, as is required of all allocator-aware library types.
      
      * Rename `SysAlloc`.
      * Replace `StlAllocator` with `CxxAllocatorAdaptor` with stricter semantics.
      * `Arena` is no longer a C++ Allocator because it is not freely copyable. Change code which used it as a C++ Allocator to use `CxxAllocatorAdaptor` instead.
      * `ThreadCachedArena` likewise.
      
      (*) Hopefully.
      
      Reviewed By: nbronson
      
      Differential Revision: D7208794
      
      fbshipit-source-id: 270588c9c3d817f4abd9fb49eed5eb9f03f96da2
      0085c239
  4. 10 Mar, 2018 3 commits
  5. 09 Mar, 2018 5 commits
    • Giuseppe Ottaviano's avatar
      Make hasher<float> avalanching · 88b3fb8e
      Giuseppe Ottaviano authored
      Summary: It currently only sets the lower 32 bits.
      
      Reviewed By: nbronson, philippv
      
      Differential Revision: D7216798
      
      fbshipit-source-id: 090f6dba990eeb7f1a9cc56e8615161c11eea026
      88b3fb8e
    • Nathan Bronson's avatar
      add IsAvalanchingHasher trait · 5ca9b9dc
      Nathan Bronson authored
      Summary:
      This diff adds folly::IsAvalanchingHasher<H, K>, which identifies
      hash functors that exceed the standard's quality requirement by also
      being avalanching.  This is useful for code that wants to map hash values
      onto a restricted range or compute a secondary hash value without doing
      extra work.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7180217
      
      fbshipit-source-id: 8c402937d0a654c0ec32c62666e9dc4e0943f769
      5ca9b9dc
    • Nathan Bronson's avatar
      clang-format in preparation for other changes · 73c483aa
      Nathan Bronson authored
      Summary:
      This diff clang-formats a couple of files in preparation for
      additional changes.
      
      Reviewed By: yfeldblum, shixiao
      
      Differential Revision: D7197983
      
      fbshipit-source-id: 8995bdaca29bcc44cd5379fc64c76cee89635ac1
      73c483aa
    • Adam Simpkins's avatar
      logging: add a getBaseLoggingConfig() function · 92dbb6a8
      Adam Simpkins authored
      Summary:
      Update folly::initLogging() to call getBaseLoggingConfig() to get a base
      configuration string that is applied before the argument that it was called
      with.  getBaseLoggingConfig() is defined as a weak symbol, and is intended to
      be overridden on a per-executable basis if desired.
      
      This allows individual programs to control their default logging settings, but
      still let them be overridden via a command line flag.  The command line flag is
      used to update this base configuration.  The command line flag can fully
      override all of the base configuration settings if desired, but settings from
      the base config that are not overridden will still be used.
      
      For example, if the base configuration defines settings for the categories
      "foo" and "bar", and the command line flag defines settings for the categories
      "bar" and "wub", the base configuration settings for "foo" will still be used.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7164832
      
      fbshipit-source-id: e172f746d7bd004948872adbbb87c597765e283c
      92dbb6a8
    • Andrii Grynenko's avatar
      Make via a free function · f999d202
      Andrii Grynenko authored
      Reviewed By: yfeldblum
      
      Differential Revision: D7203193
      
      fbshipit-source-id: 440daa2f79a919aa95ae3fdb4006f8d501c0ad93
      f999d202
  6. 08 Mar, 2018 4 commits
    • Kostia Balytskyi's avatar
      msvc2015u3: extend D4988025 fix to one more place · 67a5865f
      Kostia Balytskyi authored
      Summary: This just extends D4988025 to one more location, which wasn't covered in the initial fix.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7181160
      
      fbshipit-source-id: 8dd0866d916674870f04252a80725ecce0cd69e1
      67a5865f
    • Nathan Bronson's avatar
      folly::hasher<T> should convert args to T before hashing · 2bd76586
      Nathan Bronson authored
      Summary: folly::hasher<T> for integral and floating point types T uses a different algorithm depending on the key type.  At the moment this is taken from the actual argument type, rather than the explicitly provided one.  This is likely to be confusing.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7194941
      
      fbshipit-source-id: efa3e4bbad62e53842ec6fb80d316706324e98aa
      2bd76586
    • Dave Watson's avatar
      Add a buckets + size seqlock · aeac6f59
      Dave Watson authored
      Summary:
      There is currently an unnecessary data dependency loading the
      current backing buckets + size, reading the size, then again indexing
      in to the array.
      
      Rework the Buckets struct to make a single allocation, and store the bucket_count_ in the Segment directly.  The bucket pointer and segment are protected by a seqlock.
      
      Reviewed By: ot
      
      Differential Revision: D7167919
      
      fbshipit-source-id: 10ddceffad19f54c790b3ab7a87260445571f81d
      aeac6f59
    • Sarang Masti's avatar
      Support custom comparator in EvictingCacheMap · b6a27e14
      Sarang Masti authored
      Summary: Allow passing in a custom comparator to compare keys
      
      Reviewed By: yfeldblum, aary
      
      Differential Revision: D7175777
      
      fbshipit-source-id: e1e8d836a908b595a74b172b04ca847a5c5eb435
      b6a27e14
  7. 07 Mar, 2018 5 commits
    • Adam Simpkins's avatar
      logging: fix the open source build · 417035de
      Adam Simpkins authored
      Summary:
      Add ConfigHelpers.cpp to the folly_test_support library.
      This was accidentally broken in D7164831, but wasn't caught due to
      infrastructure errors kicking off the continuous OSS builds.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7186076
      
      fbshipit-source-id: f13bdd920bb289ae19fdb46e265123fe088b42c3
      417035de
    • Adam Simpkins's avatar
      logging: add a LoggerDB::getFullConfig() method · c5724761
      Adam Simpkins authored
      Summary:
      This method can be used to get configuration about all currently defined log
      categories, including ones that are using the default config settings.
      
      The existing LoggerDB::getConfig() method only returns information about
      categories that have non-default config settings.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7164833
      
      fbshipit-source-id: e1c043553dc4f69be58c33f2bc5b1a63763f0984
      c5724761
    • Qinfan Wu's avatar
      Suppress deprecation warning in Promise.h · d8345822
      Qinfan Wu authored
      Summary:
      [Folly][coro] Suppress deprecation warning in `Promise.h`.
      
      `Try(std::exception_ptr ep)` is deprecated. The underlying behavior doesn't improve much with this diff. But there would be a whole lot of warnings once `Promise.h` gets included by more files.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D7178381
      
      fbshipit-source-id: 9f45706283a5aaa436cbab3e7b02e085bdc8c792
      d8345822
    • Qinfan Wu's avatar
      Let all Promise<T> be friend of Task · c39b0c3b
      Qinfan Wu authored
      Summary:
      [Folly][coro] Let all `Promise<T>` be friend of `Task`.
      
      The code would not compile:
      
      ```lang=c++
      coro::Task<void> taskVoid() {
        co_await task42();
        co_return;
      }
      ```
      
      ```
      folly/experimental/coro/Promise.h:84:28: error: 'viaInline' is a private member of 'folly::coro::Task<int>'
          return std::move(task).viaInline(executor_);
                                 ^
      folly/experimental/coro/tests/CoroTest.cpp:40:3: note: in instantiation of function template specialization 'folly::coro::Promise<void>::await_transform<int>' requested here
        co_await task42();
        ^
      folly/experimental/coro/Task.h:60:13: note: declared private here
        Future<T> viaInline(folly::Executor* executor) && {
                  ^
      ```
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D7178238
      
      fbshipit-source-id: 7dca6834ac56f4c9bdb4d702996b51e932f2aae6
      c39b0c3b
    • Adam Simpkins's avatar
      logging: move test utility functions into a helper module · d455cfc4
      Adam Simpkins authored
      Summary:
      Move some utility functions from ConfigParserTest and ConfigUpdateTest into a
      new ConfigHelpers module.  This eliminates some duplicated logic and will make
      it easier to re-use these functions in other tests in the future.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7164831
      
      fbshipit-source-id: 115a227e4cb2db486f57079483b8ae9aadaa0187
      d455cfc4