1. 01 Oct, 2015 1 commit
    • Alecs King's avatar
      fix build · 68b39c30
      Alecs King authored
      Summary: fix typo
      
      jenkins and oss build (e.g. travis) failing.
      
      Reviewed By: @pavlo-fb
      
      Differential Revision: D2499462
      68b39c30
  2. 30 Sep, 2015 5 commits
    • Mohammad Husain's avatar
      APIs to determine which end of the socket has closed it · 0bf69167
      Mohammad Husain authored
      Reviewed By: @afrind
      
      Differential Revision: D2466921
      0bf69167
    • Steve O'Brien's avatar
      folly Symbolizer: fix destruction-order fiasco problem · f04e4550
      Steve O'Brien authored
      Summary: On a (broken) unit test there is a bad `CHECK` during destruction time.  This triggers an ABRT, goes through the signal handler, and in the process ends up doing a use-after-free.
      
      Moved some globals inside the functions in which they are used (w/ little duplication, as they are used in one place, mostly).
      
      Reviewed By: @luciang, @meyering
      
      Differential Revision: D2494046
      f04e4550
    • Dave Watson's avatar
      UpdateableSharedPtr in folly · 1673619a
      Dave Watson authored
      Summary: This diff adds UpdateableSharedPtr and FastUpdateableSharedPtr classes to folly. They are efficiet RCU-style holders for a shared_ptr. See the comment at the top of UpdateableSharedPtr.h for a more detailed description and benchmark results.
      
      All the added files are copied from logdevice code with (almost) no changes (`logdevice/common/` on branch `origin/logdevice-latest`). We've been using them in logdevice for a few months. D1821723 introduced it.
      
      Reviewed By: @​bmaurer
      
      Differential Revision: D1919702
      1673619a
    • Yedidya Feldblum's avatar
      Extract SparseByteSet into its own module · 6daec316
      Yedidya Feldblum authored
      Summary: [Folly] Extract `SparseByteSet` into its own module.
      
      `SparseByteSet`, formerly `FastByteSet`, is actually a generic, fully standalone class. It does not need to be embedded in `Range.cpp`.
      
      Reviewed By: @​bmaurer
      
      Differential Revision: D2460180
      6daec316
    • Ranjeeth Dasineni's avatar
      add callback to specify a client next protocol filter · 14a19db2
      Ranjeeth Dasineni authored
      Summary: From the client perspective, we set the list in order of
      preference once and call into openssl to do the selection. This adds
      a little more flexibility in that client optionally can customize the
      selection for each negotiation. added tests for the no-op case and the
      customized case. Feel free to suggest improvements.
      
      Reviewed By: @afrind
      
      Differential Revision: D2489142
      14a19db2
  3. 29 Sep, 2015 3 commits
    • Subodh Iyengar's avatar
      Pre-prune iobufs from clone · 1f46d8c5
      Subodh Iyengar authored
      Summary: It's pretty common during parsing protocols with cursors
      that there will be empty iobufs along the way.
      
      This changes it so that we prune empty IOBufs in the cloned
      output before returning it to the user.
      
      Reviewed By: @djwatson
      
      Differential Revision: D2464488
      1f46d8c5
    • Andre Pinto's avatar
      Open source AsyncPipe · 2773b36d
      Andre Pinto authored
      Summary: AsyncPipeReader and AsyncPipeWriter are classes to asynchronously
      read and write to pipes.
      
      Reviewed By: @djwatson
      
      Differential Revision: D2479514
      2773b36d
    • Yedidya Feldblum's avatar
      CodeMod apache::thrift::async::TEventBase to folly::EventBase (remainder) · f6f942be
      Yedidya Feldblum authored
      Summary: [Thrift] CodeMod `apache::thrift::async::TEventBase` to `folly::EventBase` (remainder).
      
      A few straggler bits left out of D2349828.
      
      Reviewed By: @Gownta
      
      Differential Revision: D2489063
      f6f942be
  4. 28 Sep, 2015 2 commits
    • Ben Maurer's avatar
      Broke build · 26d9f3f3
      Ben Maurer authored
      Summary: sorry
      
      Reviewed By: @​chiunlin
      
      Differential Revision: D2485925
      26d9f3f3
    • Ben Maurer's avatar
      Easy SIOF-proofing · 739bdb1c
      Ben Maurer authored
      Summary: These classes are likely to be used as static variables and can
      easily be constructed with constexpr.
      
      One that we really ought to fix is SpinLock. Sadly we have a bunch of
      implementations of it some of which need initialization.
      
      Reviewed By: @meyering
      
      Differential Revision: D2459355
      739bdb1c
  5. 25 Sep, 2015 1 commit
    • Steve O'Brien's avatar
      Singleton: refine "eager" initialization · 8f1e662a
      Steve O'Brien authored
      Summary: * `registrationComplete` has a slightly different interface (uses enums now)
      * `void doEagerInit()` method initializes synchronously; `Future<Unit> doEagerInitVia(Executor*)` now available.
      
      Reviewed By: @luciang, @meyering
      
      Differential Revision: D2463464
      8f1e662a
  6. 24 Sep, 2015 3 commits
    • Justin Gibbs's avatar
      emplace() support for AtomicHashArray/Map · 800a6af0
      Justin Gibbs authored
      Summary: Allow objects that only support in-place construction (no copy/move
      constructor) to be stored in AtomicHashMap and AtomicHashArray via the
      emplace() method. This uses variadic template parameters and perfect
      forwarding to allow the arguments for any valid constructor for the
      object to be used during insertion.
      
      Reviewed By: @nbronson
      
      Differential Revision: D2458152
      800a6af0
    • Yedidya Feldblum's avatar
      A qfind_first_byte_of using a bitset in folly/Range.cpp · 9013b5e0
      Yedidya Feldblum authored
      Summary: [Folly] A `qfind_first_byte_of` using a `bitset` in `folly/Range.cpp`.
      
      With additions to the existing benchmark program.
      
      Reviewed By: @nbronson
      
      Differential Revision: D2465890
      9013b5e0
    • James Sedgwick's avatar
      revert D2379210 · ac75bb2d
      James Sedgwick authored
      Summary: This broke EventBase tests, which I managed not to run because they're marked as extended for some reason :( I don't have time to take another stab at this at the moment so I'm reverting for now
      
      Reviewed By: @djwatson
      
      Differential Revision: D2467789
      ac75bb2d
  7. 23 Sep, 2015 3 commits
    • Yedidya Feldblum's avatar
      CpuIdTest.cpp does not need glog · 09312dae
      Yedidya Feldblum authored
      Summary: [Folly] `CpuIdTest.cpp` does not need `glog`.
      
      Reviewed By: @​@​philippv
      
      Differential Revision: D2470503
      09312dae
    • Yedidya Feldblum's avatar
      Search unpadded strings in Range benchmarks · 606fa0b6
      Yedidya Feldblum authored
      Summary: [Folly] Search unpadded strings in `Range` benchmarks.
      
      `vstr` has padding to adjust alignment. `vstrp` is a view into `vstr` that skips the padding, so that searches start out unaligned.
      
      Before this diff, haystack is 8-byte aligned: `uintptr_t(haystack.begin()) % 8 == 0`. After this diff, it is not.
      
      Reviewed By: @​@​nbronson
      
      Differential Revision: D2468934
      606fa0b6
    • Yedidya Feldblum's avatar
      Use constexpr for folly::dynamic::TypeInfo static fields · 178d3b45
      Yedidya Feldblum authored
      Summary: [Folly] Use constexpr for folly::dynamic::TypeInfo static fields
      
      These things are compile-time values. So yeah.
      
      Reviewed By: @​@​JoelMarcey
      
      Differential Revision: D2466270
      178d3b45
  8. 22 Sep, 2015 1 commit
  9. 21 Sep, 2015 4 commits
    • Chip Turner's avatar
      Move definition of strlcpy to outside an #if · e8c07bf4
      Chip Turner authored
      Summary: Looks like some platforms fail to build (open source, not internal) due to #if conditional.
      
      Reviewed By: @ldemailly
      
      Differential Revision: D2464555
      e8c07bf4
    • Subodh Iyengar's avatar
      Fix potential delete behavior of guard · ae59a5e9
      Subodh Iyengar authored
      Summary: There is a potential double free in destructor guard
      if someone calls a method which takes a DG in the destructor
      of the DG.
      
      This is potential in the case when someone is holding onto
      a DG while calling destroy() on the object.
      
      Reviewed By: @djwatson
      
      Differential Revision: D2463113
      ae59a5e9
    • Chip Turner's avatar
      Make strlcpy available in folly, second attempt · 9722033f
      Chip Turner authored
      Summary: strncpy is bad.  strlcpy is somewhat less bad.  We already had
      this function, but let's move it somewhere more reasonable.
      
      This would make sense to live in String.h, but then we have circular
      dependencies.  Since String.h includes Demangle.h, though, you get
      strlcpy by including it, so this should be okay enough.
      
      Reviewed By: @lbrandy
      
      Differential Revision: D2097590
      9722033f
    • Marc Horowitz's avatar
      make to<bool> skip range check · be90fbfb
      Marc Horowitz authored
      Summary: to<bool>(42) should return true, not throw an exception.
      
      Reviewed By: @yfeldblum
      
      Differential Revision: D2459766
      be90fbfb
  10. 20 Sep, 2015 1 commit
    • Yedidya Feldblum's avatar
      Use string for benchmark names to support computed names · facd5a7e
      Yedidya Feldblum authored
      Summary: [Folly] Use string for benchmark names to support computed names.
      
      A benchmark program might call `folly::addBenchmark` with a computed benchmark name without wishing to maintain the lifetime of the string. Support this case.
      
      Reviewed By: @philippv
      
      Differential Revision: D2460621
      facd5a7e
  11. 19 Sep, 2015 1 commit
  12. 18 Sep, 2015 2 commits
  13. 17 Sep, 2015 2 commits
    • Steve O'Brien's avatar
      folly Singleton: "eager" option to initialize upfront · e4527fb5
      Steve O'Brien authored
      Summary: Instead of the default lazy-loading behavior (still the default) some singletons might need to get initialized at startup time.  This would be for singletons which take a long time for the instance's constructor to run, e.g. expensive initialization by reading some large dataset, talking to an outside service, and so on.
      
      Provides a way for singletons to opt-in to this, and get populated at the time  `registrationComplete()` is called, instead of lazily.
      
      Some notes about the way I implemented here, mainly, why I did this as a "builder-pattern" kind of thing and not some other way.  I could probably be convinced to do otherwise. :)
      
      * Changing the constructor: the constructor's already slightly fiddly with the two optional -- well, one optional construct function, and another optional-but-only-if-construct-provided, destruct function.  Didn't want to pile more into the ctor.
      * New superclass called `EagerLoadedSingleton`; just didn't want to add more classes, esp. if it's just to add one more option.
      * Method like `void setEagerLoad()` that makes this eager-load; not sure where one would write the `shouldEagerLoad()` call, probably in some central initialization spot in `main()`, but all the maintenance would have to go there.  I like that it's "attached" to the singleton being defined.  (Though you can still do this.)  Bonus #2; the rule that builds the cpp containing "main" doesn't need to import this dependency and the cpp doesn't have to include Singleton just to do this eager-load call, nor the header for the type itself.
      * Omitting this altogether and just saying `folly::Singleton<Foo>::get_weak()` to "ping" the singleton and bring into existence: see last point.  Still might need to have the file containing this initialization decorum include/link against Foo, as well as have one place to maintain the list of things to load up-front.
      
      Reviewed By: @meyering
      
      Differential Revision: D2449081
      e4527fb5
    • Lucian Grijincu's avatar
      folly: clock: remove static globals, replace with meyers singleton · 2171293f
      Lucian Grijincu authored
      Reviewed By: @yfeldblum
      
      Differential Revision: D2446000
      2171293f
  14. 16 Sep, 2015 6 commits
  15. 15 Sep, 2015 5 commits
    • Lucian Grijincu's avatar
      folly: async: fix SIOF in test · 062f90e9
      Lucian Grijincu authored
      Summary: avoid sillyness:
      
      ```
      $ _build/opt/folly/io/async/test/async_test --gtest_list_tests
      ASAN:SIGSEGV
      =================================================================
      ==3245135==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000010 (pc 0x000000583444 sp 0x7fff17ba0c40 bp 0x7fff17ba0c80 T0)
          #0 0x583443 in std::_Rb_tree<int, std::pair<int const, folly::SSLContext::SSLLockType>, std::_Select1st<std::pair<int const, folly::SSLContext::SSLLockType> >, std::less<int>, std::allocator<std::pair<int const, folly::SSLContext::SSLLockType> > >::operator=(std::_Rb_tree<int, std::pair<int const, folly::SSLContext::SSLLockType>, std::_Select1st<std::pair<int const, folly::SSLContext::SSLLockType> >, std::less<int>, std::allocator<std::pair<int const, folly::SSLContext::SSLLockType> > > const&) third-party2/libgcc/4.9.x/gcc-4.9-glibc-2.20-fb/024dbc3/include/c++/4.9.x/bits/stl_tree.h:1138
          #1 0x583443 in std::map<int, folly::SSLContext::SSLLockType, std::less<int>, std::allocator<std::pair<int const, folly::SSLContext::SSLLockType> > >::operator=(std::map<int, folly::SSLContext::SSLLockType, std::less<int>, std::allocator<std::pair<int const, folly::SSLContext::SSLLockType> > > const&) third-party2/libgcc/4.9.x/gcc-4.9-glibc-2.20-fb/024dbc3/include/c++/4.9.x/bits/stl_map.h:295
          #2 0x583443 in folly::SSLContext::setSSLLockTypes(std::map<int, folly::SSLContext::SSLLockType, std::less<int>, std::allocator<std::pair<int const, folly::SSLContext::SSLLockType> > >) folly/io/async/SSLContext.cpp:682
          #3 0x40e028 in Initializer folly/io/async/test/AsyncSSLSocketTest2.cpp:143
          #4 0x40e028 in __static_initialization_and_destruction_0 folly/io/async/test/AsyncSSLSocketTest2.cpp:146
          #5 0x40e028 in _GLOBAL__sub_I__ZN5folly47AsyncSSLSocketTest2_AttachDetachSSLContext_Test10test_info_E folly/io/async/test/AsyncSSLSocketTest2.cpp:147
          #6 0x66cf2e in __libc_csu_init /home/engshare/third-party2/glibc/2.20/src/glibc-2.20/csu/elf-init.c:88
          #7 0x7f7145600084 in __libc_start_main (/usr/local/fbcode/gcc-4.9-glibc-2.20-fb/lib/libc.so.6+0x20084)
          #8 0x410be5 (/data/users/lucian/fbcode2/_build/opt/folly/io/async/test/async_test+0x410be5)
      
      AddressSanitizer can not provide additional info.
      AAAAAAASUMMARY: AddressSanitizer: SEGV third-party2/libgcc/4.9.x/gcc-4.9-glibc-2.20-fb/024dbc3/include/c++/4.9.x/bits/stl_tree.h:1138 std::_Rb_tree<int, std::pair<int const, folly::SSLContext::SSLLockType>, std::_Select1st<std::pair<int const, folly::SSLContext::SSLLockType> >, std::less<int>, std::allocator<std::pair<int const, folly::SSLContext::SSLLockType> > >::operator=(std::_Rb_tree<int, std::pair<int const, folly::SSLContext::SSLLockType>, std::_Select1st<std::pair<int const, folly::SSLContext::SSLLockType> >, std::less<int>, std::allocator<std::pair<int const, folly::SSLContext::SSLLockType> > > const&)
      ==3245135==ABORTING
      ```
      
      Reviewed By: @philippv
      
      Differential Revision: D2440796
      062f90e9
    • Kevin Hurley's avatar
      Add unit test for update_missing · 2b179f9d
      Kevin Hurley authored
      Summary: Forgot to add a test for this when I added update_missing.  This adds a test for it
      
      Reviewed By: @yfeldblum
      
      Differential Revision: D2441612
      2b179f9d
    • Yedidya Feldblum's avatar
      Prefer constexpr to preprocessor macros in FBString.h · a29c1dfa
      Yedidya Feldblum authored
      Summary: [Folly] Prefer `constexpr` to preprocessor macros in `FBString.h`.
      
      Reviewed By: @JoelMarcey
      
      Differential Revision: D2441709
      a29c1dfa
    • Yedidya Feldblum's avatar
      No need to export global instances of folly::AsciiCase(Ins|S)ensitive · 40673e01
      Yedidya Feldblum authored
      Summary: [Folly] No need to export global instances of `folly::AsciiCaseInsensitive` and `folly::AsciiCaseSensitive`.
      
      Calling code may simply construct instances at will - the compiler will optimize away the object construction since it has only the default ctor/dtor, no storage, and no vtable.
      
      Reviewed By: @fugalh
      
      Differential Revision: D2437419
      40673e01
    • Yedidya Feldblum's avatar
      Drop support for GCC < 4.8 in folly/FBString.h · b57fd1bc
      Yedidya Feldblum authored
      Summary: [Folly] Drop support for GCC < 4.8 in `folly/FBString.h`.
      
      Can't stay indefinitely backcompat with older compilers.
      
      Reviewed By: @JoelMarcey
      
      Differential Revision: D2441747
      b57fd1bc