1. 31 Jan, 2018 2 commits
    • Adam Simpkins's avatar
      skip AsyncSocketTest.ConnectTimeout if the address is unreachable · a4290316
      Adam Simpkins authored
      Summary:
      The code in AsyncSocketTest.ConnectTimeout attempts to pick an IP address to
      connect to that will time out rather than failing immediately.  It checks to
      see if IPv4 or IPv6 is available, but it cannot easily check if routes are
      available.  If IPv6 is available but no routes are configured it will use IPv6,
      and then the connect attempt will fail immediately rather than timing out.
      
      This changes the test to simply report itself as skipped in this case rather
      than failing.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D6843332
      
      fbshipit-source-id: 02ef3dd42f1d4b6e35edfe93b2e5e42c6666fa52
      a4290316
    • Adam Simpkins's avatar
      cmake: mark the xlog tests as BROKEN · 600568ee
      Adam Simpkins authored
      Summary:
      The xlog test currently fails due to the way that CMake invokes the compiler
      with absolute path names.  In the future we should probably update the xlog
      code with the ability to strip off some directory prefixes.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D6817547
      
      fbshipit-source-id: 40f08d56d0199c21808a4046ebc1a3a9d70a33e9
      600568ee
  2. 30 Jan, 2018 11 commits
    • Adam Simpkins's avatar
      fix buffer math in AsyncSocketTest.WriteErrorCallbackBytesWritten · 71dafdce
      Adam Simpkins authored
      Summary:
      The logic in `AsyncSocketTest.WriteErrorCallbackBytesWritten` relied on overly
      strict assumptions about how socket buffering would be implemented by the
      kernel.  The tests would fail spuriously if the kernel allowed more data to be
      buffered than the test assumed.
      
      This updates the tests to send more data and allow the kernel to buffer more
      data than it initially expects.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D6843330
      
      fbshipit-source-id: a53e19028d50c5d646654e67518a80d6b68106a2
      71dafdce
    • Joe Loser's avatar
      Add missing override for adjacent_tokens_only · 1e36e866
      Joe Loser authored
      Summary:
      The UNIX builds treat all warnings as errors, and this missing `override` keyword causes a warning which is then a hard error in the build. In Boost 1.59 and later, `Boost.ProgramOptions` provides a virtual method `adjacent_tokens_only()` which the class `GFlagValueSemanticBase` wants to override. As such, mark it using `override`.
      Closes https://github.com/facebook/folly/pull/743
      
      Differential Revision: D6851455
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 5ad448f0aad8f51f4328bfe9af37d63023089e88
      1e36e866
    • Adam Simpkins's avatar
      update OpenSSLPortabilityTest to work with old OpenSSL versions · f2ad762c
      Adam Simpkins authored
      Summary:
      Update OpenSSLPortabilityTest to work with older OpenSSL versions that do not
      have the ASN1_TIME_diff() function.
      
      Reviewed By: anirudhvr
      
      Differential Revision: D6843333
      
      fbshipit-source-id: 1d9cb104676296170df28fda9285c76680f8ef92
      f2ad762c
    • Adam Simpkins's avatar
      fix NpnTestNoOverlap SSL test with OpenSSL 1.0.2g · bfed8ebb
      Adam Simpkins authored
      Summary:
      Update NextProtocolTest.NpnTestNoOverlap to work with OpenSSL 1.0.2g.
      The test previously had a comment explicitly indicating that it did not work
      with this version of OpenSSL.
      
      Reviewed By: anirudhvr
      
      Differential Revision: D6843334
      
      fbshipit-source-id: 2c179597e5b48b5284601ca84299da8b9a9c0e62
      bfed8ebb
    • Lee Howes's avatar
      Make DrivableExecutor::drive and decendents noexcept. · aaf79543
      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
      aaf79543
    • Patryk Zaryjewski's avatar
      Fix FunctionScheduler::resetFunctionTimer · 10f39e11
      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
      10f39e11
    • Adam Simpkins's avatar
      fix flaky time handling and other issues in EventBaseTest.IdleTime · e3fd8c27
      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
      e3fd8c27
    • Adam Simpkins's avatar
      Include fbcode_builder sources in the folly github repository · a54dfc73
      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
      a54dfc73
    • Joe Loser's avatar
      cmake: add config check for openmp support · e8696645
      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
      e8696645
    • Adam Simpkins's avatar
      support CMake versions back to 3.0.2 · b1646f92
      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
      b1646f92
    • Jason Rahman's avatar
      Correctly propagate cancellations through within() · ca0f799d
      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
      ca0f799d
  3. 29 Jan, 2018 4 commits
    • Yedidya Feldblum's avatar
      Move folly/PicoSpinLock.h to folly/synchronization/ · 65215eed
      Yedidya Feldblum authored
      Summary: [Folly] Move `folly/PicoSpinLock.h` to `folly/synchronization/`.
      
      Differential Revision: D6830101
      
      fbshipit-source-id: 529df14d9cda46bae5989f901ca73effbe0022e5
      65215eed
    • Yedidya Feldblum's avatar
      Fixed initialization of Tearable with libstdc++-v4.9.2 · bd7e8c04
      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
      bd7e8c04
    • Adam Simpkins's avatar
      fix SingletonTestGlobal in shared library builds · 137443e8
      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
      137443e8
    • Neel Goyal's avatar
      Add more types to OpenSSLPtrTypes · b60217fa
      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
      b60217fa
  4. 28 Jan, 2018 1 commit
    • Lee Howes's avatar
      HAS_FEATURE fix · 543aa5ca
      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
      543aa5ca
  5. 27 Jan, 2018 3 commits
    • Lee Howes's avatar
      Disable thread caching (and hence TLS) on mobile hazptr builds. · dc96624a
      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
      dc96624a
    • Teng Qin's avatar
      Add Semaphore support for folly's Static Tracepoint · cfaf60f0
      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
      cfaf60f0
    • Xiao Shi's avatar
      mark constexpr member function const to be forward compatible. · 24d7e260
      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
      24d7e260
  6. 26 Jan, 2018 7 commits
    • Yedidya Feldblum's avatar
      Move folly/SmallLocks.h to folly/synchronization/ · cb0807b6
      Yedidya Feldblum authored
      Summary: [Folly] Move `folly/SmallLocks.h` to `folly/synchronization/`.
      
      Differential Revision: D6806563
      
      fbshipit-source-id: 26c7be6b6a01673a4f58a0952b5c531528f8ca7f
      cb0807b6
    • Martin Martin's avatar
      Create a "fast" stack trace printer that caches symbol lookups. · 72cf4378
      Martin Martin authored
      Summary: Create a "fast" stack trace printer that caches symbol lookups.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D6000178
      
      fbshipit-source-id: e81be1db21cfcd2cd26524c9ef6262337153ae36
      72cf4378
    • Adam Simpkins's avatar
      fix building with CMake 3.9+ · daeedd94
      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
      daeedd94
    • Adam Simpkins's avatar
      logging: update the tests to allow alternative type name demangling · 317a3e0d
      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
      317a3e0d
    • Adam Simpkins's avatar
      disable ThreadLocal.SharedLibrary when not building shared libs · df8c294a
      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
      df8c294a
    • Adam Simpkins's avatar
      cmake: support building with shared libraries enabled · cdb9225b
      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
      cdb9225b
    • Adam Simpkins's avatar
      cmake: update to work with CMake 3.2.2 · 29a859ad
      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
      29a859ad
  7. 25 Jan, 2018 11 commits
    • Yedidya Feldblum's avatar
      Dedup spinning in Baton and SaturatingSemaphore · f3929d8e
      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
      f3929d8e
    • Yedidya Feldblum's avatar
      Split SaturatingSemaphore test cases · 2a6fa6e2
      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
      2a6fa6e2
    • Yedidya Feldblum's avatar
      Use relaxed CAS in Baton wait path · 2a32c935
      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
      2a32c935
    • Yedidya Feldblum's avatar
      Merge wait and timed-wait implementations in Baton · f1f9cb87
      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
      f1f9cb87
    • Xiao Shi's avatar
      backport `std::make_from_tuple` from C++17 · 4f622004
      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
      4f622004
    • Yedidya Feldblum's avatar
      Cut extraneous dep on glog from Expected · ab97d44a
      Yedidya Feldblum authored
      Summary: [Folly] Cut extraneous dep on `glog` from `Expected`.
      
      Reviewed By: mzlee
      
      Differential Revision: D6768016
      
      fbshipit-source-id: 7b242797ccfe18ea7ccb3ef7a045ff55147dd2eb
      ab97d44a
    • Adam Simpkins's avatar
      cmake: run tests even without built-in gtest support · 58b26400
      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
      58b26400
    • Yedidya Feldblum's avatar
      Fix folly/synchronization/Tearable.h under gcc49 · 44634d57
      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
      44634d57
    • Scott Franklin's avatar
      Fix a segfault in folly::window · 5ae1055c
      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
      5ae1055c
    • Yedidya Feldblum's avatar
      Improve the SingletonThreadLocal fast path · 2d7a636e
      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
      2d7a636e
    • Petr Lapukhov's avatar
      Add support for JSON merge diff generation · 58791d65
      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
      58791d65
  8. 24 Jan, 2018 1 commit