- 05 Jan, 2017 2 commits
-
-
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
-
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
-
- 04 Jan, 2017 4 commits
-
-
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
-
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
-
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
-
Yedidya Feldblum authored
Summary: [Folly] 2017. Reviewed By: Orvid Differential Revision: D4378593 fbshipit-source-id: 4a448228bb1ddbe191b6e8562483867a399be846
-
- 03 Jan, 2017 3 commits
-
-
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
-
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
-
Christopher Dykes authored
Summary: It's only accessible within EventBase, and is never used. Reviewed By: yfeldblum Differential Revision: D4375541 fbshipit-source-id: a0c6d86a2b1968c37c67303c8411a23ed936d9d5
-
- 02 Jan, 2017 4 commits
-
-
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
-
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
-
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
-
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
-
- 01 Jan, 2017 1 commit
-
-
Yedidya Feldblum authored
Summary: Fix assorted missing includes. Reviewed By: wqfish Differential Revision: D4375902 fbshipit-source-id: 2b32631857c8f94e505153d32932cdf97d8d0b33
-
- 31 Dec, 2016 1 commit
-
-
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
-
- 30 Dec, 2016 3 commits
-
-
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
-
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
-
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
-
- 29 Dec, 2016 7 commits
-
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
- 28 Dec, 2016 1 commit
-
-
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
-
- 27 Dec, 2016 3 commits
-
-
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
-
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
-
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
-
- 25 Dec, 2016 1 commit
-
-
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
-
- 24 Dec, 2016 1 commit
-
-
Yedidya Feldblum authored
Summary: [Folly] Fix a wrong filename in a comment in `ExceptionWrapper.h`. Reviewed By: pixelb Differential Revision: D4366224 fbshipit-source-id: cab31dc0a934ae9e9714436e28c8a1a295f7d3de
-
- 23 Dec, 2016 2 commits
-
-
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
-
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
-
- 22 Dec, 2016 7 commits
-
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-