- 30 Jan, 2018 7 commits
-
-
Lee Howes authored
Summary: Added noexcept to drive functionality of executors as exceptions should not be leaking from these operations. Reviewed By: yfeldblum Differential Revision: D6846415 fbshipit-source-id: 569819ef94d28c9c8c060cc8015247c416b8ab45
-
Patryk Zaryjewski authored
Summary: Keeping moved out functions on the heap leads to segfaults. Let's fix that by calling make_heap each time we need to update. We will regress resetFunctionTimer complexity to O(n), which is exactly what it was before D5668557. Reviewed By: simpkins Differential Revision: D6822488 fbshipit-source-id: 94f75789b01ff85e2df271822b767160285462c3
-
Adam Simpkins authored
Summary: Update EventBaseTest.IdleTime() to drive the loop once before starting the bulk of the test logic. This triggers the initial NotificationQueue callbacks which can otherwise slow down the test slightly and make it more prone to failing due to not accounting for the time required for these callbacks. Also replace `ASSERT_*()` checks inside a lambda with `EXPECT_*()`. The googletest `ASSERT_*()` macros only work directly inside the main test function, as they `return` from the current function. When used inside the lambda these skip the remainder of the lambda but continue running the remainder of the test checks, which causes incorrect failures. Reviewed By: yfeldblum Differential Revision: D6843335 fbshipit-source-id: 879901edb6e5a5a84736705fb2d1cb8d2e0cc252
-
Adam Simpkins authored
Summary: Include the fbcode_builder sources in the folly repository under build/fbcode_builder/. These build scripts will make it easier. to set up continuous integration for the opensource github repository. Note that for folly this is potentially slightly confusing, since this will now add a top-level build directory in addition to the existing folly/build subdirectory. However, it seems easiest for now to follow the default fbcode_builder conventions. This does not yet include configuration files for the folly build--I will add those in a subsequent diff. Test Plan: Confirmed the CI build work with the upcoming configuration files. Reviewed By: yfeldblum Differential Revision: D6700052 fbshipit-source-id: ba026835e866bda5eed0776ec8bbf1ac51014034
-
Joe Loser authored
Summary: Some compilers such as Apple Clang do not support the compiler flag `-fopenmp`. So, do not add it by default to the list of `CXX_FLAGS` that are expected for *every* compiler to support. Instead, check if the `CXX_COMPILER` specified by `CMake` supports `-fopenmp` by using `CHECK_CXX_COMPILER_FLAG`. Closes https://github.com/facebook/folly/pull/741 Reviewed By: simpkins Differential Revision: D6843171 Pulled By: yfeldblum fbshipit-source-id: 671958d867400b5802d7d563036639d61d11f615
-
Adam Simpkins authored
Summary: Update CMakeLists.txt to support CMake versions as old as 3.0.2. Reviewed By: yfeldblum Differential Revision: D6843104 fbshipit-source-id: 43c2fc685c63df373ed33183f8144de779c97edf
-
Jason Rahman authored
Summary: Within() is not properly propegating cancellations and other interrupts via raise() since it technically breaks the normal propegation mechnaism of copying the interrupt handler pointer. Reviewed By: yfeldblum Differential Revision: D6838285 fbshipit-source-id: 8f3efbd3eebe21c2f348b6aba991b0997be4f14f
-
- 29 Jan, 2018 4 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Move `folly/PicoSpinLock.h` to `folly/synchronization/`. Differential Revision: D6830101 fbshipit-source-id: 529df14d9cda46bae5989f901ca73effbe0022e5
-
Yedidya Feldblum authored
Summary: [Folly] Fixed initialization of `Tearable` with libstdc++-v4.9.2, which is missing definitions of `atomic_init`. Reviewed By: davidtgoldblatt Differential Revision: D6833004 fbshipit-source-id: 88d4cc91f90618a98df110bec5e434c35e750b16
-
Adam Simpkins authored
Summary: The SingletonTestGlobal code asserted that there was exactly one singleton object registered (the one defined in this test file). However if folly is built as a shared library, all of it will be loaded, and several other singletons are also defined by other parts of folly. (Currently 7 singletons get registered.) Reviewed By: yfeldblum Differential Revision: D6817544 fbshipit-source-id: de3947770690ffb68d097040bbbfbe42bce3bf94
-
Neel Goyal authored
Summary: Add more types and a macro to make defining them easier. Reviewed By: mingtaoy Differential Revision: D6823450 fbshipit-source-id: eb13a8b48efb1625fc3f8035356812f918703c6d
-
- 28 Jan, 2018 1 commit
-
-
Lee Howes authored
Summary: Foolishly #defined __has_feature when it wasn't and let it leak, but something later must have been relying on something similar. This replaces the uses with FOLLY_HAS_FEATURE. Reviewed By: yfeldblum, magedm Differential Revision: D6829724 fbshipit-source-id: 40635dd67135316f27be2aa2a6b2d579dbf843e1
-
- 27 Jan, 2018 3 commits
-
-
Lee Howes authored
Summary: thread_local does not work on certain mobile builds. This will disable it if FOLLY_MOBILE is set. Reviewed By: yfeldblum, magedm Differential Revision: D6785773 fbshipit-source-id: 6a74edec739f42562045aadb4e1ee39d121ce90d
-
Teng Qin authored
Summary: This Diff adds new `FOLLY_SDT_WITH_SEMAPHORE` Macro that allows the (potentially expensive) Static Tracepoints be gated with Semaphore and be enabled on-demand. The Semaphores are compatible with SystemTap's Tracepoint Semaphores, with the following difference: - Instead of having build Process generate a header file containing the Semaphore variable and check function, and to be included, this Diff uses the approach that users need to explicitly define the semaphore using `FOLLY_SDT_SEMAPHORE_DEFINE` before using `FOLLY_SDT_WITH_SEMAPHORE`. Then the check function could be used in the same file, or in any other linked module with doing `FOLLY_SDT_SEMAPHORE_DECLARE` first. This is inspired from GFlag's defining and declaring. - We keep allowing original `FOLLY_SDT` with no Semaphore for flexibility. Differential Revision: D6814268 fbshipit-source-id: e1e4463c71539b4d2071b21880d4ee7689fedce8
-
Xiao Shi authored
Summary: Since C++14, constexpr non-static member function will not be implicitly marked const. See the blog post below for more details. https://akrzemi1.wordpress.com/2013/06/20/constexpr-function-is-not-const/ Reviewed By: mzlee Differential Revision: D6819658 fbshipit-source-id: 4a756191fca3e744bda3c63c2669e24d6b16861e
-
- 26 Jan, 2018 7 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Move `folly/SmallLocks.h` to `folly/synchronization/`. Differential Revision: D6806563 fbshipit-source-id: 26c7be6b6a01673a4f58a0952b5c531528f8ca7f
-
Martin Martin authored
Summary: Create a "fast" stack trace printer that caches symbol lookups. Reviewed By: yfeldblum Differential Revision: D6000178 fbshipit-source-id: e81be1db21cfcd2cd26524c9ef6262337153ae36
-
Adam Simpkins authored
Summary: D6806326 reduced the minimum version of CMake required to 3.2.0. This had the unintended effect of also disabling some newer CMake policies by default, which caused builds to fail in newer CMake versions. In particular, we make use of the GoogleTest module when it is available (CMake 3.9+). However it requires policy `CMP0057` to be enabled. This explicitly enables `CMP0057` when it is available. Reviewed By: yfeldblum Differential Revision: D6816891 fbshipit-source-id: 60ca46654d46207a96f0fad9c3467426a25b4afd
-
Adam Simpkins authored
Summary: Several of the tests in LoggerTest.cpp check error messages that include demangled type names. The type names are returned slightly differently on other platforms (e.g., `i` instead of `int`, or `A13_c` instead of `char [13]`) This changes the tests to perform regular expression matches rather than exact string matches. This now allows any strings to appear where a type name is expected. Reviewed By: yfeldblum Differential Revision: D6805680 fbshipit-source-id: 56d501944dacb505c3c09d84c555a1f686065077
-
Adam Simpkins authored
Summary: The `ThreadLocal.SharedLibrary` test depends on building a separate `thread_local_test_lib.so`. This can only be built when folly was compiled with PIC. This also fixes the test to fail normally rather than segfaulting if it cannot load `thread_local_test_lib.so`. Reviewed By: yfeldblum Differential Revision: D6805683 fbshipit-source-id: b451b94c2a4b3184a8f61de3b7f83e69169205f0
-
Adam Simpkins authored
Summary: In general, building folly as a shared library is not recommended since the library ABI changes frequently. Nonetheless, this updates the CMake files to support building with `BUILD_SHARED_LIBS=ON`. Previously the build would fail when using this option. The main reason to support this for now is because some of the tests can only be run when compiled with `-fPIC`. Defining `FOLLY_SHARED_LIBRARY_SUPPORT` in `folly-config.h` makes it possible to skip these tests when being compiled without shared library support. Reviewed By: yfeldblum Differential Revision: D6805682 fbshipit-source-id: 098290c7405837350577f48ed224947fb62415db
-
Adam Simpkins authored
Summary: Update the CMake build scripts to work with CMake 3.2.2, as well as older boost libraries. Several other open source Facebook projects have CI that checks that the code builds with modified Ubuntu 14.04 systems (Ubuntu 14.04 + gcc 4.9 + CMake 3.2.2). By default Ubuntu 14.04 ships with gcc 4.8.2 and CMake 2.8; we do not support vanilla Ubuntu 14.04. Reviewed By: yfeldblum Differential Revision: D6806326 fbshipit-source-id: 243f2f9cea20c7a9430dc386c921e3cafeee77f7
-
- 25 Jan, 2018 11 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Dedup spinning in `Baton` and `SaturatingSemaphore`. And add spin-yield to spin-only `SaturatingSemaphore`, as is done in `Baton`. Reviewed By: djwatson Differential Revision: D6726786 fbshipit-source-id: 428efb950577ab1d500caffe56bf2a8cacf66c34
-
Yedidya Feldblum authored
Summary: [Folly] Split `SaturatingSemaphore` test cases into spin-only and may-block variants. Reviewed By: djwatson Differential Revision: D6726718 fbshipit-source-id: d22a76de6077d9c8b4eb2ef7f6d118f48c8c5104
-
Yedidya Feldblum authored
Summary: [Folly] Use relaxed CAS in `Baton` wait path. As is done in `SaturatingSemaphore`. There are surrounding operations on `state_` with stronger memory orders. Reviewed By: nbronson Differential Revision: D6726704 fbshipit-source-id: 8032db4b98a09455c84c730e2e99515d1a9442da
-
Yedidya Feldblum authored
Summary: [Folly] Merge wait and timed-wait implementations in `Baton`. Now `MemoryIdler` is also used in the timed-wait case, not just in the wait case. Reviewed By: spalamarchuk Differential Revision: D6720048 fbshipit-source-id: 7612eb60d1908d08d41897fa163b0693b59abab1
-
Xiao Shi authored
Summary: `std::make_from_tuple` constructs an object of type T, using the elements of the tuple t as the arguments to the constructor. Backport. For the unit test, I referred to https://github.com/phalpern/uses-allocator/blob/711f6071a1230272de28c022400d678e7e9f0228/make_from_tuple.t.cpp Reviewed By: yfeldblum Differential Revision: D6808665 fbshipit-source-id: 257f27110c01da39b5415b02415d74f0b6062051
-
Yedidya Feldblum authored
Summary: [Folly] Cut extraneous dep on `glog` from `Expected`. Reviewed By: mzlee Differential Revision: D6768016 fbshipit-source-id: 7b242797ccfe18ea7ccb3ef7a045ff55147dd2eb
-
Adam Simpkins authored
Summary: When `gtest_add_tests()` is not available (CMake versions before 3.9) just use `add_test()` to add each test executable as a single test. Reviewed By: yfeldblum Differential Revision: D6805681 fbshipit-source-id: a5fa95600dc29659498725cdc3cb1ae00188e1a3
-
Yedidya Feldblum authored
Summary: [Folly] Fix `folly/synchronization/Tearable.h` under `gcc49`, which version of `libstdc++` lacks `std::is_trivially_copyable`. Reviewed By: simpkins Differential Revision: D6805662 fbshipit-source-id: 5f368cda58b860c7a7ee05addb325a655ab09830
-
Scott Franklin authored
Summary: If the callback passed to `window` throws an exception, the process will segfault. This happens because `Core::doCallback` will execute a callback that throws an exception twice. Once with the original arguments, and again with the wrapped exception: https://fburl.com/wdmztc4l In the case of `window`, the callback in question moves its `ctx` to the next iteration of `spawn`, and so the second call to the callback segfaults. This prevents the issue by wrapping the call to `func` in a future, which captures the exception and returns it to the caller, rather than allowing it to bubble out and break things. Reviewed By: yfeldblum Differential Revision: D6802396 fbshipit-source-id: 3595c622e8e8f58209c7b20f553f7642bc49c089
-
Yedidya Feldblum authored
Summary: [Folly] Improve the `SingletonThreadLocal` fast path. Principally, by having the thread-local cache checked checked before the static-local guard variable is checked, rather than after. This change measurably improves the `EventBase` benchmark: ```name=branch ============================================================================ folly/io/async/test/EventBaseBenchmark.cpp relative time/iter iters/s ============================================================================ timeMeasurementsOn 1.02us 980.21K timeMeasurementsOff 251.64% 405.41ns 2.47M ============================================================================ ``` ```name=master ============================================================================ folly/io/async/test/EventBaseBenchmark.cpp relative time/iter iters/s ============================================================================ timeMeasurementsOn 1.03us 969.51K timeMeasurementsOff 247.08% 417.45ns 2.40M ============================================================================ ``` This change shortens the fast-path in `folly::RequestContext::getStaticContext()` (manually cleaned up): ```name=branch ---- fast path ---- <+0>: mov rax,QWORD PTR fs:folly::SingletonThreadLocal<...>::get()::cache@tpoff <+9>: test rax,rax <+12>: je folly::RequestContext::getStaticContext()+16 <+14>: ret <+15>: nop ---- slow path ---- <+16>: push rbp <+17>: mov rbp,rsp <+20>: call folly::SingletonThreadLocal<...>::getWrapperOutline() <+25>: mov rdx,QWORD PTR fs:0x0 <+34>: mov QWORD PTR fs:folly::SingletonThreadLocal<...>::get()::cache@tpoff,rax <+43>: add rdx,OFFSET FLAT:folly::SingletonThreadLocal<...>::get()::cache@tpoff <+50>: mov QWORD PTR [rax+0x10],rdx <+54>: pop rbp <+55>: ret ``` ```name=master ---- fast path ---- <+0>: push rbp <+1>: mov rbp,rsp <+4>: push rbx <+5>: sub rsp,0x8 <+9>: cmp BYTE PTR guard variable for folly::RequestContext::getStaticContext()::singleton[rip],0x0 <+16>: je folly::RequestContext::getStaticContext()+48 <+18>: mov rax,QWORD PTR fs:folly::SingletonThreadLocal<...>::get()::cache@tpoff <+27>: test rax,rax <+30>: je folly::RequestContext::getStaticContext()+96 <+32>: mov rbx,QWORD PTR [rbp-0x8] <+36>: leave <+37>: ret <+38>: nop WORD PTR cs:[rax+rax*1+0x0] ---- slow path ---- <+48>: mov edi,OFFSET FLAT:guard variable for folly::RequestContext::getStaticContext()::singleton <+53>: call __cxa_guard_acquire <+58>: test eax,eax <+60>: je folly::RequestContext::getStaticContext()+18 <+62>: sub rsp,0x8 <+66>: mov edi,OFFSET FLAT:folly::RequestContext::getStaticContext()::singleton <+71>: push 0x0 <+73>: call folly::SingletonThreadLocal<...>::SingletonThreadLocal({lambda()}) <+78>: pop rax <+79>: mov edi,OFFSET FLAT:guard variable for folly::RequestContext::getStaticContext()::singleton <+84>: pop rdx <+85>: call __cxa_guard_release <+90>: jmp folly::RequestContext::getStaticContext()+18 <+92>: nop DWORD PTR [rax+0x0] <+96>: call folly::SingletonThreadLocal<...>::getSlow() <+101>: mov rbx,QWORD PTR [rbp-0x8] <+105>: mov QWORD PTR fs:folly::SingletonThreadLocal<...>::get()::cache@tpoff,rax <+114>: leave <+115>: ret <+116>: mov rbx,rax <+119>: mov edi,OFFSET FLAT:guard variable for folly::RequestContext::getStaticContext()::singleton <+124>: call __cxa_guard_abort <+129>: mov rdi,rbx <+132>: call _Unwind_Resume ``` Reviewed By: andriigrynenko Differential Revision: D6763655 fbshipit-source-id: 6f2d317ffd40a4e1f143b4bbbd087e85cc667b8c
-
Petr Lapukhov authored
Summary: Add method to recursively compute RFC7386-compliant merge-diff between two folly::dynamic objects. Reviewed By: yfeldblum Differential Revision: D6794339 fbshipit-source-id: f2b807404faa922d5a705f858825329a95fb0d38
-
- 24 Jan, 2018 7 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Fix autotools build to include `GlobalShutdownSocketSet`. Reviewed By: pixelb Differential Revision: D6801184 fbshipit-source-id: f832b6b5b77872d1ced44295efee7a39529561aa
-
Adam Simpkins authored
Summary: The top-level CMakeLists.txt explicitly includes any files inside "test" subdirectories. However, the folly/io/async/test contains several library headers and sources that we do want to include in libfolly. Explicitly re-include these files. Reviewed By: yfeldblum Differential Revision: D6794707 fbshipit-source-id: 9df3157503f317c49e48252497b8a3d06e6161d5
-
Yedidya Feldblum authored
Summary: [Folly] Split out the global `ShutdownSocketSet` singleton into its own library to keep the dependencies of `ShutdownSocketSet` lighter-weight. In general, globals should be an opt-in sort of thing anyway. Reviewed By: elsteveogrande Differential Revision: D6790009 fbshipit-source-id: c68fa2bbaeaf3ff205e0c3b1c739d7561e940e64
-
Adam Simpkins authored
Summary: Previously to use gmock you simply needed to link against libgmock_main. However, googletest pull request #1339 was recently merged into upstream googletest: https://github.com/google/googletest/pull/1339 These changes now require explicitly linking against libgmock_main, libgmock, and libgtest. Reviewed By: yfeldblum Differential Revision: D6794709 fbshipit-source-id: 03dcccec966e62240987ee0051dfa87be8614cca
-
Adam Simpkins authored
Summary: The exception_tracer code changes program behavior when you link it in. Therefore it should not be included in the main libfolly library. This splits the exception_tracer code out into 3 separate libraries, which matches the behavior described in the exception_tracer README.md file. Reviewed By: yfeldblum Differential Revision: D6787807 fbshipit-source-id: 51400c3ff464d359b4acc56679b5f584f3b586fd
-
Adam Simpkins authored
Summary: Move Benchmark.cpp out of the main libfolly library and into its own libfollybenchmark library. This more closely follows the build artifacts produced by the autoconf build, and will help avoid breaking downstream projects that depend on folly and expect to find libfollybenchmark. The code in Benchmark.cpp is also normally only needed by test programs. Reviewed By: yfeldblum Differential Revision: D6793538 fbshipit-source-id: fd273c11fc9f199a159b9e5d14badaf805480db0
-
Lee Howes authored
Summary: Exported symbol breaks under strict warnings on some mobile builds. Remove export by using anonymous namespace as it is not required. Reviewed By: yfeldblum Differential Revision: D6791282 fbshipit-source-id: fd7f8294fdcdc2069cc6fea64c9e269bc094c9f8
-