- 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 12 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
-
Petr Lapukhov authored
Summary: Merge patch is simple method of editing JSON documents. This implementation uses the recursive version documented in the RFC. Reviewed By: yfeldblum Differential Revision: D6777104 fbshipit-source-id: 554f801fe793a6fe004a8321ca41510b48225aa9
-
Aaryaman Sagar authored
Summary: as title Reviewed By: yfeldblum Differential Revision: D6565911 fbshipit-source-id: 5bed8f44520f6c1d7d6e685bf2a38cf97f734205
-
Lee Howes authored
Summary: Variable shadowing warning under specific compiler flags. This works around that by renaming. Reviewed By: yfeldblum Differential Revision: D6782706 fbshipit-source-id: 60f379f301a88ab370b056469693a198439d1b11
-
Lee Howes authored
Summary: The original code provided an unsupported alignment for 32-bit ARM builds. This change makes use of hardware_destructive_interference_size, which represents exactly what the alignment field is used for. Reviewed By: yfeldblum Differential Revision: D6782366 fbshipit-source-id: b8e2cdf6a0bafdba96d40d729535646b1f6660df
-
Yedidya Feldblum authored
Summary: [Folly] An `unsorted` tag. For contexts in which it is desired explicitly to allow, as an optimization, the passing of unsorted containers, where such would ordinarily be assumed to be a pessimization or assumed to be incorrect. Reviewed By: igorsugak Differential Revision: D6782860 fbshipit-source-id: 0bc7002306497e8bb0a62c4589d4f243da062ff8
-
- 23 Jan, 2018 9 commits
-
-
Adam Simpkins authored
Summary: Always use the `-std=gnu++14` compiler flag when performing configure-time checks on Unix-based platforms. On older versions of gcc (e.g. 5.x) some of the configuration checks incorrectly fail without this option. Reviewed By: meyering Differential Revision: D6788847 fbshipit-source-id: 6e182ff9930a42b01c23f9a0cceda0108052224b
-
Adam Simpkins authored
Summary: Use the `use -Wshadow-compatible-local` flag if the compiler supports it. This also required marking the gmock include directory as a system include directory, to prevent the compiler from warning about existing name shadowing in gmock's header files. Reviewed By: yfeldblum Differential Revision: D6787806 fbshipit-source-id: f0e5f6de543a47b19a09440c58ee2961dab23054
-
Adam Simpkins authored
Summary: On unix platforms, check to see if the compiler supports the `-faligned-new` and `-Wno-noexcept-type` flags before adding them to the compiler command line flags. Reviewed By: yfeldblum Differential Revision: D6787808 fbshipit-source-id: d34af5ae4251ad3639fdaa1a8d5cb2df4b10e986
-
Michael Lee authored
Summary: A lot of shadowed variables in tests. Simple renaming should suffice. Reviewed By: yfeldblum Differential Revision: D6786138 fbshipit-source-id: 22c1c4d7cac13b367ed534a3f1d20714150b39f9
-
Pádraig Brady authored
Summary: This clashes with std::make_optional with -std=gnu++17 giving: call of overloaded 'make_optional(std::__cxx11::basic_string<char>)' is ambiguous Reviewed By: yfeldblum Differential Revision: D6780579 fbshipit-source-id: fea8c76869e4d9b744fc3182379328a91879b1d2
-
Nick Terrell authored
Summary: This reverts commit 1249d203df610cb29c16e03f7a06ea90aea80418 bypass-lint An infra SEV is better than not reverting this diff. If you copy this password, see you in SEV Review! cause_a_sev_many_files Differential Revision: D6745720 fbshipit-source-id: b357d0d8c42388d6f322cbb8f6d8958f7f02df54
-
Nick Terrell authored
Summary: Log bytes before/after (de)compression to the logging backend. Use the codec name in the key, and for lz4/zstd also include the library version and compression level. I chose the keys such that each individual piece as <= 15 characters, to be inlined. However, I chose readability of the keys over trying to squeeze the entire key in 15 characters. Reviewed By: yfeldblum Differential Revision: D6745720 fbshipit-source-id: 1249d203df610cb29c16e03f7a06ea90aea80418
-
Nick Terrell authored
Summary: Adds an open source counters interface. Reviewed By: yfeldblum Differential Revision: D6609118 fbshipit-source-id: cc326443339b88acdd11e4184eb0c82d786732c2
-
Pádraig Brady authored
Summary: Move the coarse_steady_clock definition outside the c++ < 17 specific defines, as otherwise it's not defined when using -std=gnu++17. Reviewed By: yfeldblum Differential Revision: D6780601 fbshipit-source-id: 35cc5aa10db7d890e17bf03cc5e80803a9356d7a
-
- 20 Jan, 2018 1 commit
-
-
Maged Michael authored
Summary: Keeping all variables that interact with hazptr_domain::rcount_ signed int to avoid conversion errors. Reviewed By: yfeldblum Differential Revision: D6754593 fbshipit-source-id: e283f127a112a529a0e98eb82b6061b44aa9d2ca
-