1. 05 Jan, 2017 2 commits
    • Yedidya Feldblum's avatar
      Namespace the UBSAN_DISABLE symbol · 9b7138e4
      Yedidya Feldblum authored
      Summary:
      [Folly] Namespace the `UBSAN_DISABLE` symbol.
      
      Symbols defined by Folly should typically be namespaced to Folly.
      
      Reviewed By: igorsugak
      
      Differential Revision: D4378401
      
      fbshipit-source-id: ff72f5f44e7c9d1bbf08efcec24bd3dc05d10ee7
      9b7138e4
    • Yedidya Feldblum's avatar
      Backport ceil, floor, round from C++17 std::chrono · cd578dbf
      Yedidya Feldblum authored
      Summary:
      [Folly] Backport `ceil`, `floor`, `round` from C++17 `std::chrono`.
      
      These functions for operating on `std::chrono::duration` and `std::chrono::time_point` values are useful
      
      Note: The implementations are derived from cppreference.com, which has a notice listing all content there as licensed under CC-BY-SA.
      
      Reviewed By: ericniebler
      
      Differential Revision: D4375603
      
      fbshipit-source-id: 36a098bf5f75db071c1670518fc42bbc6df2817d
      cd578dbf
  2. 04 Jan, 2017 4 commits
    • Yedidya Feldblum's avatar
      Keep the std::exception* or std::type_info* in folly::exception_wrapper · eaa278a5
      Yedidya Feldblum authored
      Summary:
      [Folly] Keep the `std::exception*` or `std::type_info*` in `folly::exception_wrapper`.
      
      In the case of construction with a `std::exception_ptr`. Instead of keeping a pair of `std::string`s, strictly losing information (not that we use any more information, but theoretically we could).
      
      Of note:
      * Shrinks the size of `folly::exception_wrapper`, in all cases, to 48 bytes. Down from 32 bytes + 2 S bytes on 64-bit architectures, where S is the size in bytes of `std::string`. In particular, `libstdc++`'s implementation is 32 bytes, while `libc++`'s and Folly's implementations are 24 bytes on 64-bit architectures, for total original sizes of 96 bytes or 80 bytes.
      * Allows to avoid rethrowing in `with_exception` in the case of an instance constructed with an `std::exception_ptr` plus an `std::exception&`.
      
      Reviewed By: ericniebler
      
      Differential Revision: D4369935
      
      fbshipit-source-id: 35155e0b271959a4878fe077fc911b17767a2358
      eaa278a5
    • Shoaib Meenai's avatar
      Add preprocessor macro to disable throw* definitions · dc938550
      Shoaib Meenai authored
      Summary:
      libc++ 4.0 and above define the throw* functions in `stdexcept`, so
      Folly doesn't need to define them itself. In case those definitions are
      backported to 3.9, add a Folly macro to skip the definitions regardless
      of the libc++ version number.
      
      Reviewed By: yfeldblum, Orvid
      
      Differential Revision: D4378102
      
      fbshipit-source-id: 674d98d7c448aa7e75bdd8b6e9fe965cd34a83d7
      dc938550
    • Yedidya Feldblum's avatar
      folly::_t and use it in folly::exception_wrapper · 815100a0
      Yedidya Feldblum authored
      Summary:
      [Folly] `folly::_t` and use it in `folly::exception_wrapper`.
      
      Intended in part for use in Folly code, but can be used outside.
      
      Instead of:
      
      ```lang=c++
      namespace folly {
      using original = //...
      using decayed = typename std::decay<original>::type;
      }
      ```
      
      In C++14:
      
      ```lang=c++
      namespace folly {
      using original = //...
      using decayed = std::decay_t<original>;
      }
      ```
      
      And in C++11:
      
      ```lang=c++
      namespace folly {
      using original = //...
      using decayed = _t<std::decay<original>>:
      }
      ```
      
      Not perfect, but better.
      
      HT ericniebler and https://github.com/eniebler/meta.
      
      Reviewed By: ericniebler
      
      Differential Revision: D4371539
      
      fbshipit-source-id: 9046d9caab73141b95f4bce4fb1af26e0c1ac739
      815100a0
    • Yedidya Feldblum's avatar
      2017 · ed8c80a0
      Yedidya Feldblum authored
      Summary: [Folly] 2017.
      
      Reviewed By: Orvid
      
      Differential Revision: D4378593
      
      fbshipit-source-id: 4a448228bb1ddbe191b6e8562483867a399be846
      ed8c80a0
  3. 03 Jan, 2017 3 commits
    • Steve O'Brien's avatar
      folly: ReadMostlySharedPtr fix for `getStdShared()` method · 38894440
      Steve O'Brien authored
      Summary:
      Fix this error:
      
        In file included from FooUtils.cpp:2:
        folly/experimental/ReadMostlySharedPtr.h:323:21: error: 'ptr_' is a private member of 'folly::detail::ReadMostlySharedPtrCore<Foo, folly::TLRefCount>'
              return impl_->ptr_;
                            ^
        ... in instantiation of member function 'folly::ReadMostlySharedPtr<Foo, folly::TLRefCount>::getStdShared' requested here:
                getSomeReadMostlySharedPtr().getStdShared();
                                             ^
        buck-out/dev/gen/folly/__default_headers__#default,headers/folly/experimental/ReadMostlySharedPtr.h:94:22: note: declared private here
          std::shared_ptr<T> ptr_;
                             ^
        1 error generated.
      
      The added test case repro's the above error (and the changes to the class fixes it).
      
      Alternatives include just making `ReadMostlySharedPtr` a friend class of `ReadMostlySharedPtrCore`, but that seems uglier than this fix, which was to simply use the public `getShared` method which already exists.
      
      As luck would have it, I had tried that, and also found that a `const ReadMostlySharedPtr` would still give some trouble because `getStdShared` was not marked `const`.  Fixed that too.  (I assume if a copy of a const `shared_ptr` member / such a member of a `const` instance is permissible, then the method should be const as well.  Plus it's const in the other `ReadMostlySharedPtr` class.)
      
      Reviewed By: djwatson
      
      Differential Revision: D4377690
      
      fbshipit-source-id: 8e9e778ca991fd04b0eb1e5762795d871ce0ee8d
      38894440
    • Yedidya Feldblum's avatar
      Drop the boost dependency from Traits.h and FBVector.h · 03a4c5bd
      Yedidya Feldblum authored
      Summary:
      [Folly] Drop the `boost` dependency from `Traits.h` and `FBVector.h`.
      
      Should not need it anymore with the currently supported compilers.
      
      Reviewed By: ericniebler
      
      Differential Revision: D4375572
      
      fbshipit-source-id: df890c07f49b0499d2d2d08aa21c226b2893281e
      03a4c5bd
    • Christopher Dykes's avatar
      Kill a dead constant in EventBase · 1807488d
      Christopher Dykes authored
      Summary: It's only accessible within EventBase, and is never used.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4375541
      
      fbshipit-source-id: a0c6d86a2b1968c37c67303c8411a23ed936d9d5
      1807488d
  4. 02 Jan, 2017 4 commits
    • Mathieu Baudet's avatar
      fbcode: remove unused includes from .cpp files without #if (but possibly #define) · b97b7d79
      Mathieu Baudet authored
      Summary: Same as D4312617 but this time not excluding source files with `#define`.
      
      Reviewed By: soumith
      
      Differential Revision: D4344811
      
      fbshipit-source-id: 5a314960c319f029c6737c8c8ac8224ec2f20218
      b97b7d79
    • Yedidya Feldblum's avatar
      Drop <boost/operators.hpp> as a dependency of FBVector.h · 9c20a858
      Yedidya Feldblum authored
      Summary:
      [Folly] Drop `<boost/operators.hpp>` as a dependency of `FBVector.h`.
      
      We can rough it.
      
      Reviewed By: wqfish
      
      Differential Revision: D4375986
      
      fbshipit-source-id: 6b8c16ca9a55341fee396a253f7ad0c4d0201b0e
      9c20a858
    • Yedidya Feldblum's avatar
      Move the traits factories up, and remove <boost/mpl/has_xxx.hpp> · ca73efa8
      Yedidya Feldblum authored
      Summary:
      [Folly] Move the traits factories up, and remove `<boost/mpl/has_xxx.hpp>`.
      
      Also, they now generate aliases to the types aliased by `std::true_type` and `std::false_type`. So now the API is entirely compatible with the requirements of `std::integral_constant` (because it is `std::integral_constant`).
      
      Reviewed By: wqfish
      
      Differential Revision: D4375944
      
      fbshipit-source-id: dfd41283f13d793f7fc1f173590cd93cdee39a10
      ca73efa8
    • Zonr Chang's avatar
      Add FOLLY_OPENSSL_HAS_ALPN and FOLLY_OPENSSL_HAS_SNI. · 7dabbf60
      Zonr Chang authored
      Summary:
      This expresses the intention of long predicate on OpenSSL version and
      OPENSSL_NO_TLSEXT more clearly.
      
      This also enables ALPN and SNI support when BoringSSL is in use.
      
      ALPN is an essential function to make HTTP/2 work when building Proxygen
      with BoringSSL.
      Closes https://github.com/facebook/folly/pull/534
      
      Reviewed By: Orvid
      
      Differential Revision: D4375391
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 009f311bceb0ee911d904d96a3e678a5f7241575
      7dabbf60
  5. 01 Jan, 2017 1 commit
    • Yedidya Feldblum's avatar
      Fix assorted missing includes · 827187dc
      Yedidya Feldblum authored
      Summary: Fix assorted missing includes.
      
      Reviewed By: wqfish
      
      Differential Revision: D4375902
      
      fbshipit-source-id: 2b32631857c8f94e505153d32932cdf97d8d0b33
      827187dc
  6. 31 Dec, 2016 1 commit
    • Petr Lapukhov's avatar
      Add more MSG_OOB tests for EventHandler · e1a15f96
      Petr Lapukhov authored
      Summary:
      Sending OOB messages allows for single byte to be sent truly out of band and placed in an OOB buffer. This byte can then be read (by default) independent from normal data.
      
      The two test-cases validate that
      
      (1) We can receive OOB and normal data on same socket
      (2) Sending OOB byte does not affect regular data
      
      NOTE: sending more than one byte usually means the OOB data interleaved with regular data.
      
      Reviewed By: alandau
      
      Differential Revision: D4370652
      
      fbshipit-source-id: a573dae7e5afba5a4a410be5371faf4f065c74e9
      e1a15f96
  7. 30 Dec, 2016 3 commits
    • Zbigniew Szymanski's avatar
      Move internal `decodeUtf8` method from json.cpp to public util Unicode.h · 67f7bb72
      Zbigniew Szymanski authored
      Summary:
      Moved decodeUtf8 -> folly::utf8ToCodePoint.
      Implementation was not changed to make sure no bugs are introduced.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4372739
      
      fbshipit-source-id: a015a9c47ece825e09e7c243fae454f21f99db80
      67f7bb72
    • Yedidya Feldblum's avatar
      Let Future::then call callbacks outside of the catch handler · 1d36d464
      Yedidya Feldblum authored
      Summary:
      [Folly] Let `Future::then` call callbacks outside of the catch handler.
      
      And `Future::onError`.
      
      This makes the behavior of calls to `Future` callbacks with respect to currently-handled ("active") exceptions consistent - there will not be an active exception by the time the `Future` callback is called. (Unless `Future::then` or `Future::onError`, etc., is itself called with an active exception. Or unless the `Promise` is fulfilled, outside of the `Future` implementation code, with an active exception.)
      
      This will affect any code which tries to call `std::current_exception()` or `throw;` from within a `Future` callback, such as an `onError` handler. That code will crash. (It was incorrect anyway, and relied on misusing Folly Futures.)
      
      Reviewed By: ericniebler
      
      Differential Revision: D4372173
      
      fbshipit-source-id: 600b22e4db63c98358de29a6abcee807fbc53b0f
      1d36d464
    • Yedidya Feldblum's avatar
      Const-correctness for folly::exception_wrapper::with_exception with non-std::exception · 686092cb
      Yedidya Feldblum authored
      Summary:
      [Folly] Const-correctness for `folly::exception_wrapper::with_exception` with non-`std::exception`.
      
      This also lets us unify the various flavors of `with_exception` and `is_compatible_with`. And fix `is_compatible_with` for non-`exception` types.
      
      Reviewed By: ericniebler
      
      Differential Revision: D4364474
      
      fbshipit-source-id: 417edfd45f7cfba952ce961559da67769b7c41bc
      686092cb
  8. 29 Dec, 2016 7 commits
    • Eric Niebler's avatar
      folly::TryException inherits from std::logic_error, like... · 06649f43
      Eric Niebler authored
      folly::TryException inherits from std::logic_error, like std::bad_optional_access; becomes no-throw copyable
      
      Summary:
      folly::TryException was inheriting from std::exception and managing its own message in a std::string data member.
      That is suboptimal for the following reasons:
      
      1) The analagous std:: type, std::bad_optional_access, inherits from std::logic_error. According to the Principle of Least
         Astonishment, folly::TryException should follow suit.
      2) std::logic_error has a nothrow copy constructor. (This is typically implemented with a ref-counted string.)
         std::string does not. By explicitly managing its own message, folly::TryException picks up a throwing copy
         constructor. Exception classes should try to be nothrow copyable.
      3) With most stdlib implementations, std::string is larger by a lot than the std:: exceptions. By changing
         folly::TryException as suggested, its size drops from 40 bytes to 16 on clang and gcc >=5.0.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4368760
      
      fbshipit-source-id: 327f78f428419ccf9c7af3e0f57cc478d147fb37
      06649f43
    • Eric Niebler's avatar
      folly::FutureException inherits from std::logic_error, like std::future_error;... · 42ba1a22
      Eric Niebler authored
      folly::FutureException inherits from std::logic_error, like std::future_error; becomes smaller and nothrow-copy
      
      Summary:
      folly::FutureException was inheriting from std::exception and managing its own message in a std::string data member.
      That is suboptimal for the following reasons:
      
      1) The analagous std:: type, std::future_error, inherits from std::logic_error. According to the Principle of Least
         Astonishment, folly::FutureExpception should follow suit.
      2) std::logic_error has a nothrow copy constructor. (This is typically implemented with a ref-counted string.)
         std::string does not. By explicitly managing its own message, folly::FutureException picks up a throwing copy
         constructor. Exception classes should try to be nothrow copyable.
      3) With most stdlib implementations, std::string is larger by a lot than the std:: exceptions. By changing
         folly::FutureException as suggested, its size drops from 40 bytes to 16 on clang and gcc >=5.0.
      
      Also, I took the liberty of fixing some copy-pastas that gave some of these exception types explicit default
      constructors.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4367909
      
      fbshipit-source-id: 1639d404237493f929db6116a760c2d0e599877d
      42ba1a22
    • Bi Xue's avatar
      Make FunctionRef support bool operator · 42f55fa5
      Bi Xue authored
      Summary:
      To support following code:
      ```
      void foo(folly::FunctionRef<void(void)> callback = {}) {
        if (callback) {
          callback();
        }
      }
      ```
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4372296
      
      fbshipit-source-id: 7d21e6a44b6f6b046b424f0139465511dbae7b8b
      42f55fa5
    • Giuseppe Ottaviano's avatar
      Avoid shadowing warnings in SYNCHRONIZED · e910dd4b
      Giuseppe Ottaviano authored
      Summary: If two `SYNCHRONIZED` blocks are nested the internal `SYNCHRONIZED_*` variables can be compatible shadows (`SYNCHRONIZED_state` always is), so GCC will issue a warning with `-Wshadow-compatible-local`. This diff disambiguates the variable names for each `SYNCHRONIZED` block (as long as they appear on different lines).
      
      Reviewed By: yfeldblum, philippv
      
      Differential Revision: D4371263
      
      fbshipit-source-id: b467a1a2651667c679382a1cc1eaa28f7ee4e6b3
      e910dd4b
    • Anirudh Ramachandran's avatar
      Add OpenSSL portability layer · 87659d07
      Anirudh Ramachandran authored
      Summary:
      Enable folly to build with OpenSSL alternatives (e.g., BoringSSL).
      
      Some SSL-related tests are disabled:
      
       - Async session cache ones (BoringSSL has an async cache impl but with a different API)
       - TFO tests
       - Some changes to error tests which expect specific error strings. This is
         flaky as a test because it will break everytime even within a version, so we
         should fix that first.
      
      This should be a noop for OpenSSL 1.0.2.
      
      BoringSSL commit used is 35c8afd3143289c99aa3820e01950c564d7aced8 (10/26/2016)
      
      Closes: https://github.com/facebook/folly/issues/198
      
      Reviewed By: siyengar
      
      Differential Revision: D3280382
      
      fbshipit-source-id: 4141d992e0d8dd797ac4af479cfe90844a23278f
      87659d07
    • Yedidya Feldblum's avatar
      folly::copy · ec5f59cf
      Yedidya Feldblum authored
      Summary:
      [Folly] `folly::copy`.
      
      Usable when you have a function with two overloads:
      
          class MyData;
          void something(MyData&&);
          void something(const MyData&);
      
      Where the purpose is to make copies and moves explicit without having to spell out the full type names - in this case, for copies, to invoke copy constructors.
      
      When the caller wants to pass a copy of an lvalue, the caller may:
      
          void foo() {
            MyData data;
            something(folly::copy(data)); // explicit copy
            something(std::move(data)); // explicit move
            something(data); // const& - neither move nor copy
          }
      
      Reviewed By: markisaa, ericniebler
      
      Differential Revision: D3462023
      
      fbshipit-source-id: 6c777be288f2a7012c1b4b46dc988890b8662595
      ec5f59cf
    • Philip Pronin's avatar
      nuke UNSYNCHRONIZED · 1c3b25b2
      Philip Pronin authored
      Summary:
      API of `UNSYNCHRONIZED` is confusing as if you have two nested
      `SYNCHRONIZED` blocks, `UNSYNCHRONIZED` always unlocks the inner-most,
      even if you pass in the variable name used in the outer `SYNCHRONIZED`
      block.
      
      The macro was marked as "deprecated" in D3526489, remove it here.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4371297
      
      fbshipit-source-id: 13ddc1ff77cb3d5045844c5ade0e95dbe2bccf6d
      1c3b25b2
  9. 28 Dec, 2016 1 commit
    • Yedidya Feldblum's avatar
      A smaller implementation of try_and_catch · f4dd104c
      Yedidya Feldblum authored
      Summary:
      [Folly] A smaller implementation of `try_and_catch`.
      
      No longer done as a derived class. This lets us make the protected members of `exception_wrapper` into private members.
      
      Reviewed By: ericniebler
      
      Differential Revision: D4366065
      
      fbshipit-source-id: ae4763b55e431ac08260f74f6a23a257581247c9
      f4dd104c
  10. 27 Dec, 2016 3 commits
    • Adrian Hamza's avatar
      Make UncaughtExceptionCounter public · 1e039743
      Adrian Hamza authored
      Summary: Make UncaughtExceptionCounter public by moving it from folly/detail to folly. I am adding a scope performance counter that works in a similar way to SCOPE_EXIT/SCOPE_ERROR and I need the UncaughtExceptionCounter functionality.
      
      Reviewed By: yfeldblum, ericniebler
      
      Differential Revision: D4342783
      
      fbshipit-source-id: a1848e89cbb6340e2ac48adabf7bf76cece1b86d
      1e039743
    • Eric Niebler's avatar
      Add proper Doxygen comment markings around exception_wrapper example. · 8f0aa1f8
      Eric Niebler authored
      Summary: The Doxegen-generated documentation for exception_wrapper is unreadable. The code needs to be denoted with \code...\endcode tags; otherwise, it is formatted like a paragraph and newlines are ignored.
      
      Reviewed By: igorsugak
      
      Differential Revision: D4367636
      
      fbshipit-source-id: 680bedfb152300d8a6287bf441dd9b81b9b94c80
      8f0aa1f8
    • Christopher Small's avatar
      pass RNG by reference so state is updated on each call · f2987ecd
      Christopher Small authored
      Summary: folly::Random was taking the RNG by value (not reference) so it was not updating the RNG's state on each invocation -- so the RNG would not advance to the next value in the sequence.
      
      Reviewed By: yfeldblum, nbronson
      
      Differential Revision: D4362999
      
      fbshipit-source-id: f93fc11911b92e230ac0cc2406151474d15f85af
      f2987ecd
  11. 25 Dec, 2016 1 commit
    • Sven Over's avatar
      fix include dependencies in folly/stats · d9817812
      Sven Over authored
      Summary:
      Histogram-defs.h depends on Histogram.h, so it should include it.
      
      This missing dependency is especially annoying because users who
      include both Histogram.h and Histogram-defs.h will find that
      clang-format reorders the includes such that Histogram-defs.h will
      be included before Histogram.h, which breaks the build.
      
      Same for BucketedTimeSeries-defs.h and TimeseriesHistogram-defs.h.
      
      Reviewed By: pixelb
      
      Differential Revision: D4366282
      
      fbshipit-source-id: 518ef315154c28beb091e5c097db2bec6eea3ba0
      d9817812
  12. 24 Dec, 2016 1 commit
  13. 23 Dec, 2016 2 commits
    • Christopher Dykes's avatar
      Use std::chrono for timeouts to sslAccept and sslConn in AsyncSSLSocket · 3caa3408
      Christopher Dykes authored
      Summary: Because `std::chrono` makes it clear exactly what unit of time is in use.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4363560
      
      fbshipit-source-id: 47aeef21f842f39d8e886bec441897ecf1f3761b
      3caa3408
    • Jacob Bower's avatar
      Enable making libfollyinit even when libdwarf is not available · ecd7292d
      Jacob Bower authored
      Summary:
      The hard requirement for libdwarf when building libfollyinit does not appear to be needed.
      
      Without libfollyinit, code with calls to folly::init() won't build. Notably this is breaking build/execution of tests + examples for the Watchman C++ client in Watchman.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4361498
      
      fbshipit-source-id: f3586d8cdca36eda3634663e95a4a61d879de6cf
      ecd7292d
  14. 22 Dec, 2016 7 commits
    • Yedidya Feldblum's avatar
      Move Thrower into exception_wrapper · 6e0964d9
      Yedidya Feldblum authored
      Summary:
      [Folly] Move `Thrower` into `exception_wrapper`.
      
      It is only used by `exception_wrapper`, so it might as well be a member type.
      
      Also, make it private. That means we need to tweak `try_and_catch`.
      
      Since we are tweaking `try_and_catch`, tweak all similar cases.
      
      Reviewed By: luciang
      
      Differential Revision: D4361815
      
      fbshipit-source-id: c5025894465a2c7760bd79dbbd272079fd34dd79
      6e0964d9
    • Yedidya Feldblum's avatar
      Move the guts of try_and_catch into a detail namespace · c60d131b
      Yedidya Feldblum authored
      Summary:
      [Folly] Move the guts of `try_and_catch` into a `detail` namespace.
      
      Just a bit cleaner this way. Also, now we always slice before returning the derived object, so the derived type never escapes.
      
      Reviewed By: luciang
      
      Differential Revision: D4361471
      
      fbshipit-source-id: 5c9567d3c5480ee9943a85139b8f27ba3b9da2d6
      c60d131b
    • Jason Leng's avatar
      Update future interrupts example in README · 8d510416
      Jason Leng authored
      Summary: Updated the future interrupts example to get rid of the shared pointer circular reference problem
      
      Reviewed By: djwatson
      
      Differential Revision: D4360037
      
      fbshipit-source-id: cb959929a508df4dcf3b81d01012bc55044a0b17
      8d510416
    • Jacob Bower's avatar
      Make folly pkg-config more usable on OS X · 6536cf29
      Jacob Bower authored
      Summary:
      As part of open-sourcing the Watchman C++ client I'm adding an (optional) dependency in Watchman to Folly. When I tried to build this client with Folly on OS X I ran into some problems using the libfolly pkg-config file. This diff addresses these issues:
      
      1. When using `build/bootstrap-osx-homebrew.sh`, the compile config for gflags and OpenSSL are overriden. If present, these custom flags will now be propagated to `libfolly.pc`.
      2. I changed the the package requirements in `libfolly.pc` from `Requires.private` to just `Requires`.
      
      Both of these changes are needed as much of Folly's implementation is in header files. As such, consumers of libfolly need to use the same library/include paths when building.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4332720
      
      fbshipit-source-id: 6a051ae318ac10bdeb4dc383a16de81f1c0327bb
      6536cf29
    • Yedidya Feldblum's avatar
      to_weak_ptr · ed6a4850
      Yedidya Feldblum authored
      Summary:
      [Folly] `to_weak_ptr`.
      
      Make a `weak_ptr` and return it from a `shared_ptr` without specifying the template type parameter and letting the compiler deduce it.
      
      So you can write this:
      
          auto wptr = to_weak_ptr(getSomethingShared<T>());
      
      Instead of this:
      
          auto wptr = weak_ptr<T>(getSomethingShared<T>());
      
      Useful when `T` is long, such as:
      
          using T = foobar::FooBarAsyncClient;
      
      Reviewed By: nbronson
      
      Differential Revision: D4361276
      
      fbshipit-source-id: 782a1d2d57b6e5823cb4018e445110098f1ce41f
      ed6a4850
    • Christopher Dykes's avatar
      Support fchmod and include the correct portability headers for FileUtil · df148cba
      Christopher Dykes authored
      Summary: `FileUtil.cpp` uses `fchmod`, which Windows doesn't have, so implement it and also include the correct portability headers for the use of `mkstemp` and now `fchmod` as well.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4360650
      
      fbshipit-source-id: 300163689c54574548e7bf274a56264714d216ed
      df148cba
    • Yedidya Feldblum's avatar
      Add missing includes in folly/experimental/observer · 2c45faef
      Yedidya Feldblum authored
      Summary:
      [Folly] Add missing includes in `folly/experimental/observer`.
      
      In particular, the missing includes of `folly/ExceptionString.h`.
      
      Motivation.
      
      Reviewed By: andrewjcg, nbronson
      
      Differential Revision: D4360991
      
      fbshipit-source-id: 4e4407669926b55d6d85df08edea70784a8f348c
      2c45faef