1. 29 Nov, 2016 4 commits
    • Andrii Grynenko's avatar
      Disallow folly::Singletons before main() · ee43735c
      Andrii Grynenko authored
      Summary:
      Make folly::Singleton fail if singleton is requested before registrationComplete. By doing this we disallow any folly::Singleton to be created before main().
      
      Strict mode is still disabled for Python and Hs.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4121322
      
      fbshipit-source-id: b66c23e24f6a7324cd12ddb77cad960e0950a1aa
      ee43735c
    • Guo Xiao's avatar
      Escape backticks in shell script · 9c5b3564
      Guo Xiao authored
      Summary: Closes https://github.com/facebook/folly/pull/520
      
      Reviewed By: pixelb
      
      Differential Revision: D4243347
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: cae0b36abdc7807afc188220f7f421f2a3bbc973
      9c5b3564
    • Nick Terrell's avatar
      Support old LZ4 versions · b82fb4f7
      Nick Terrell authored
      Summary: D4194834 broke the OSS build.  Ubuntu 14.4 has r114 in its repo, so support it.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4224129
      
      fbshipit-source-id: c85e95716ee1a08b33455bfe6fc9f7712d226edf
      b82fb4f7
    • Christopher Dykes's avatar
      Use std::terminate rather than throwing in a noexcept function · 82e1b579
      Christopher Dykes authored
      Summary: Because MSVC isn't happy about it and generates a warning with a lot of context.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4242688
      
      fbshipit-source-id: b1e26c9e3b58e7bac0e00ab8959358010fa610e8
      82e1b579
  2. 28 Nov, 2016 2 commits
    • r8k's avatar
      fix bootstrap on osx · 5d8ea982
      r8k authored
      Summary:
      * include all dependencies
       * update `autoconf` & `configure` with correct params
       * include `make` & `make install` in the bootstrap for a better user experience
       * fixes #332
      Closes https://github.com/facebook/folly/pull/513
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4177362
      
      Pulled By: Orvid
      
      fbshipit-source-id: c62d6633c382fca57bb06db08724a7355b71bdb3
      5d8ea982
    • Yedidya Feldblum's avatar
      Canonicalize some aspects of the folly/experimental/hazptr test · 7d70d8d6
      Yedidya Feldblum authored
      Summary:
      [Folly] Canonicalize some aspects of the `folly/experimental/hazptr` test.
      
      * Remove the custom `main()` and use the provided weak symbol, either from `folly/test/common/TestMain.cpp` or from `gtest` depending on the build.
      * Extract some common setup/teardown (just debug logging in this case) to a test fixture.
      
      Reviewed By: Orvid
      
      Differential Revision: D4234154
      
      fbshipit-source-id: 25613cba0ad6c9147714d98150e013fba1a64d46
      7d70d8d6
  3. 27 Nov, 2016 1 commit
    • Phil Willoughby's avatar
      Fix termination output on GCC · c520b4fa
      Phil Willoughby authored
      Summary:
      Thanks nbronson for suggesting this fix. I don't see why this should make any
      difference (and nor does clang) but the important thing is that it works now.
      
      Reviewed By: nbronson
      
      Differential Revision: D4212670
      
      fbshipit-source-id: 08b4313d736f237039a807fbc458d4d581a2ef35
      c520b4fa
  4. 25 Nov, 2016 3 commits
    • Christopher Dykes's avatar
      Allow the use of an emulated futex for EventCount · 46e46627
      Christopher Dykes authored
      Summary:
      Otherwise it won't work under MSVC where we don't have Futexes.
      This is achieved by using the Futex API already used elsewhere in Folly.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4233517
      
      fbshipit-source-id: d6ae6a34b2287cf485f8e4a316445a2ba746d1a7
      46e46627
    • Christopher Dykes's avatar
      Revert D4214296: [Folly] Include init/Init.cpp · 6d58adc5
      Christopher Dykes authored
      Summary: This reverts commit 636ed5ae8ad36a323054efaad96d3756f1b7b9d0
      
      Differential Revision: D4214296
      
      fbshipit-source-id: 41fe55a8fcbf41cce44fee7ba65eda5aadbf97b3
      6d58adc5
    • Subodh Iyengar's avatar
      Fix TFO refused case · 16dc0043
      Subodh Iyengar authored
      Summary:
      When TFO falls back, it's possible that
      the fallback can also error out.
      
      We handle this correctly in AsyncSocket,
      however because AsyncSSLSocket is so
      inter-twined with AsyncSocket, we missed
      the case of error as well.
      
      This changes it so that a connect error on
      fallback will cause a handshake error
      
      Differential Revision: D4226477
      
      fbshipit-source-id: c6e845e4a907bfef1e6ad1b4118db47184d047e0
      16dc0043
  5. 24 Nov, 2016 1 commit
    • Yedidya Feldblum's avatar
      Suppress deprecation warnings in related tests · 26c4e8d2
      Yedidya Feldblum authored
      Summary:
      [Folly] Suppress deprecation warnings in related tests.
      
      When a test specifically exercises a marked-deprecated library or a marked-deprecated part of a library, we do not need to see the deprecation warnings - they are noise.
      
      Specifically, `Singleton` and `Subprocess` have tested but marked-deprecated APIs, so we suppress deprecation warnings in those specific test suites.
      
      Reviewed By: andrewjcg
      
      Differential Revision: D4230826
      
      fbshipit-source-id: 937b078029cde492906088caa3a9e5eee449bc12
      26c4e8d2
  6. 23 Nov, 2016 4 commits
    • Christopher Dykes's avatar
      Don't expect .native() to return a string · 4abc2aa0
      Christopher Dykes authored
      Summary: It's called `.native()` for a reason, and returns a `wstring` on windows, so call `string()` instead.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4229254
      
      fbshipit-source-id: d5f9658b41f45fd719ca3e878a2e61c9dce24f10
      4abc2aa0
    • Teng Qin's avatar
      Add USDT header file to folly · f405f9de
      Teng Qin authored
      Summary:
      Derived from `sdt.h` in [[ https://sourceware.org/systemtap/ | SystemTap ]]
      Performed changes and clean-ups including:
      - Get rid of the `sdt-config.h`.
      - Get rid of "Running in Assembler" code.
      - Replace the `DTRACE_PROBE_1, ... DTRACE_PROBE_N` Macro family with a single Macro using the "count Macro arguments" trick
      - Get rid of argument signed-ness calculation. A **lot** of painful code were there only for this, and it has no real usage except for displaying purposes.
      - Re-structure the helper methods (Macros) so that the logic of the code is a bit more readable.
      - Add some comments so that it would be easier for users and future developers to understand what this header file is actually doing.
      - Update license banner.
      
      Reviewed By: meyering
      
      Differential Revision: D3792966
      
      fbshipit-source-id: 564a1011f7946d30be78191f334e072d94fa264e
      f405f9de
    • Christopher Dykes's avatar
      Close sockets properly in the portability headers · 215636b2
      Christopher Dykes authored
      Summary:
      Even when linked against the dynamic runtime.
      In truth, the old way was far cleaner, but we do need to be able to close the file descriptors as there is a hard global limit set by the CRT when it's compiled of 8k file descriptors.
      This closes it by applying a flag that prevents calls to `CloseHandle` from actually closing the handle, then we call `_close` to get the file descriptor itself closed, then we can call `_closesocket` to close the socket and handle.
      This is complicated by the fact that attempting to close a handle that you've marked as being prevented from being closed will trigger an SEH exception, but only if you have a debugger attached. That means that, for anything closing sockets to be debuggable, we have to handle that exception (as a no-op) and then get to have fun trying to get `STATUS_HANDLE_NOT_CLOSABLE`, which for some absurd reason, is only defined as part of the driver developer kit's headers. Some fun ensued where VS was nice enough to point out that the bcrypt headers also defines `NTSTATUS`, and doesn't require building as a driver to use it. For that reason we borrow its definition of `NTSTATUS` rather than declaring it ourselves.
      We also have to prevent the main windows headers from defining the base SEH exceptions, because those will be redefined by `ntstatus.h` otherwise :(
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4222625
      
      fbshipit-source-id: 6ed7e91b7a735b5506eb189e452983cd8cace34b
      215636b2
    • Christopher Dykes's avatar
      Suppress some aborts in debug mode when using already closed file descriptors · e6d69248
      Christopher Dykes authored
      Summary: The helper exists because MSVC is a pain in this regard, so use it.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4224037
      
      fbshipit-source-id: 6c6415877785f13ea91618a3042f2470dccd08c1
      e6d69248
  7. 22 Nov, 2016 3 commits
    • Stepan Palamarchuk's avatar
      Fix fibers gdb utils script · d5f5bc4f
      Stepan Palamarchuk authored
      Summary:
      There was a recent change in boost compatibility that changed fibers internals and thus broke this script.
      This diff fixes gdb script to properly print stack trace for fibers.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4214575
      
      fbshipit-source-id: 4bf69e9b297c7539a2b2b71093998c30d6a2d81c
      d5f5bc4f
    • Lovro Puzar's avatar
      Tweak zstd autoconf check so the build works with older zstd · 4432fc24
      Lovro Puzar authored
      Summary: Ubuntu 16.10 has a package for zstd 0.5.1 which is too old to be used by folly.  With this change autoconf will check that one of the newer functions is present, disable zstd if not.
      
      Reviewed By: Orvid, philippv
      
      Differential Revision: D4219964
      
      fbshipit-source-id: 1e64dfb62f81f7e61b097cb7d4fd3810da476625
      4432fc24
    • Christopher Dykes's avatar
      Correctly bind to the wildcard address in AsyncServerSocket::bind · e2a71713
      Christopher Dykes authored
      Summary: Because Windows disagrees with everything else about how to specify that you want the wildcard address. It's done with an empty string on Windows, but `nullptr` everywhere else.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4216970
      
      fbshipit-source-id: b5dc136946d9677a96be3252e44d383a6abca800
      e2a71713
  8. 21 Nov, 2016 3 commits
    • Christopher Dykes's avatar
      Work around an MSVC expression SFINAE bug in DynamicParser · cc97c6ea
      Christopher Dykes authored
      Summary: The good news is that it's cleaner than it was to start with.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4215323
      
      fbshipit-source-id: 6758092f1e76f60b360753026bb7716737a51304
      cc97c6ea
    • Christopher Dykes's avatar
      Disable the DoubleRegistrationLogging singleton test under MSVC · 45c9e441
      Christopher Dykes authored
      Summary: It's the only test in the file that is dependent on Subprocess, which is currently unsupported under MSVC.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4214812
      
      fbshipit-source-id: 9dcd9763b51d037e0c452f79f134df286a11e718
      45c9e441
    • Zach Amsden's avatar
      Include init/Init.cpp · efd4e281
      Zach Amsden authored
      Summary: Anything calling folly::init() will not link with open source build
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4214296
      
      fbshipit-source-id: 636ed5ae8ad36a323054efaad96d3756f1b7b9d0
      efd4e281
  9. 19 Nov, 2016 6 commits
  10. 18 Nov, 2016 10 commits
    • Christopher Dykes's avatar
      Disable a range test under MSVC · adbc74b7
      Christopher Dykes authored
      Summary: Because, as the comment says, MSVC fails miserably at this, producing errors at compile time.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4207544
      
      fbshipit-source-id: d9a11b72877d22d3d3fe2e2c862d99601ab21431
      adbc74b7
    • Martin Martin's avatar
      Expose folly::symbolizer::dumpStackTrace(). · ff77522a
      Martin Martin authored
      Summary:
      Expose folly::symbolizer::dumpStackTrace() for use with
      custom signal handlers.
      
      Reviewed By: luciang
      
      Differential Revision: D4174004
      
      fbshipit-source-id: 510b77edef652f3e9d10f0acfb4998b64a15fad5
      ff77522a
    • Phil Willoughby's avatar
      Explain crash when exception is thrown from Scope Guard · ae7e1fd0
      Phil Willoughby authored
      Summary:
      Print a message to `std::cerr` when the current program is about to call `std::terminate` because a `folly::ScopeGuard` callback threw an exception. This goes to `std::terminate` in the (common) cases when the `ScopeGuard` destructor is `noexcept`
      
      This gives the user a small clue as to what just happened, since the default diagnostics for this on some platforms do not help at all.
      
      Reviewed By: nbronson
      
      Differential Revision: D4061096
      
      fbshipit-source-id: c3b534d4a36b095e08e46f375251b6fd416ccd68
      ae7e1fd0
    • Nathan Bronson's avatar
      force read for doNotOptimizeAway(*ptr_to_small_trivial) · aebb140d
      Nathan Bronson authored
      Summary:
      doNotOptimizeAway's "X" input operand constraint is interpreted
      more loosely by gcc than by clang, resulting in surprising behavior
      for doNotOptimizeAway(*ptr) and a difference in behavior between gcc
      and clang benchmarks.  clang also is more aggressive about placing an
      input operand into a register even when the constraint would allow it to
      be in memory, so an "r,m" constraint has a similar problem.  This diff
      changes the input constraint so that register-sized values must actually
      be copied into a register, which makes the behavior more intuitive and
      more consistent across platforms.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D4199767
      
      fbshipit-source-id: aa56a7b11cb3229b95da87295f0dfc38476959d2
      aebb140d
    • Yedidya Feldblum's avatar
      Fix Build: folly with -Wmissing-braces · 005736d3
      Yedidya Feldblum authored
      Summary:
      [Folly] Fix Build: `folly` with `-Wmissing-braces`.
      
      Construction of `std::array` with list-initialization for the contained C array requires double braces, per the standard.
      
      Compilers accept it with single braces, but will reject it when `-Wmissing-braces` is passed.
      
      Reviewed By: igorsugak, meyering
      
      Differential Revision: D4202629
      
      fbshipit-source-id: e5b87a655e7f25e6cddb931dda28b172c768f227
      005736d3
    • Andrew Gallagher's avatar
      folly/portability: move some macro definitions to `CPortability.h` · 7b77a513
      Andrew Gallagher authored
      Summary: These macros apply to both C and C++.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4199905
      
      fbshipit-source-id: 8dc22959d0a6349c6c76415d1a38eda52cab83a5
      7b77a513
    • Tom Jackson's avatar
      Faster unhexlify · ace896f3
      Tom Jackson authored
      Summary:
      Using already-available lookup table instead of a bunch of branching, this improves read throughput from ~750MB/s to 2.1GB/s in benchmarks.
      
      ```
      before:        (time)   (rate)
      BM_unhexlify   1.39ns  719.26M
      after:
      BM_unhexlify 470.59ps    2.13G
      ```
      
      Reviewed By: philippv
      
      Differential Revision: D4201352
      
      fbshipit-source-id: 8393e066c45c402ccb8b537fdb25417e8e6a9511
      ace896f3
    • Christopher Dykes's avatar
      Don't rely on implicit lookup of member names in dependent base classes · be0254f3
      Christopher Dykes authored
      Summary:
      The standard says this shouldn't be done, but GCC, Clang, and MSVC all do, at least, MSVC does if you don't pass the `/permissive-` switch to disable this non-compliant lookup.
      This just qualifies it with `this->` which solves the problem.
      
      MSVC plans to eventually (some time after the 2017 release) enable `/permissive-` by default, so let's start compiling with it now.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4200725
      
      fbshipit-source-id: 8545c6bcda9ba6006733c15f668805cb1260517a
      be0254f3
    • Christopher Dykes's avatar
      Include atomic in SingletonTestStructs.cpp · 1f5e574d
      Christopher Dykes authored
      Summary: This was relying on it being transitively included by system headers, which isn't the case under MSVC.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4199882
      
      fbshipit-source-id: c25dc1e86687e19851923a1a660a91bcf63f0e6d
      1f5e574d
    • Christopher Dykes's avatar
      Mark a couple more local constexpr values as static · 4bd573d6
      Christopher Dykes authored
      Summary: Because MSVC doesn't let you access it without capturing it from within a lambda otherwise.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4199867
      
      fbshipit-source-id: 7b829b2cc373edbebe3498901fa323c89a211818
      4bd573d6
  11. 17 Nov, 2016 3 commits
    • Srinivas \"Teja\" Rao's avatar
      Update AtomicHashMap.md · 21b43d2d
      Srinivas \"Teja\" Rao authored
      Summary:
      it seems second is the boolean that we need to compare.
      Closes https://github.com/facebook/folly/pull/518
      
      Differential Revision: D4197096
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 71987dafac0ddbdb7817b55732619edbe9aed81b
      21b43d2d
    • Nick Terrell's avatar
      Replace deprecated LZ4 functions · db777d6b
      Nick Terrell authored
      Summary:
      Replace deprecated functions with their functionally equivalent counterparts.
      
      See https://github.com/lz4/lz4/blob/dev/lib/lz4.c#L1405 and https://github.com/lz4/lz4/blob/dev/lib/lz4hc.c#L634
      
      Reviewed By: Cyan4973
      
      Differential Revision: D4194834
      
      fbshipit-source-id: aa4f934c46fe764fcec8ea29221e3882da2b5cdf
      db777d6b
    • Andrii Grynenko's avatar
      VirtualEventBase · b981b9f2
      Andrii Grynenko authored
      Summary:
      This implements a view onto an EventBase, which can keep track of all tasks created through it and join them on destruction. Multiple VirtualEventBases can be backed by the same EventBase. This can be useful to have the same IO thread/thread-pool be shared between multiple libraries, allowing them to each have it's own VirtualEventBase and control its lifetime.
      
      Since VirtualEventBase also supports LoopKeepAlive and onDestruction functionality, it can be easily integrated with FiberManagerMap.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4158719
      
      fbshipit-source-id: 7df964f36e5276e2b5665fd8394ea2e187aa298c
      b981b9f2