1. 25 May, 2018 4 commits
    • Yedidya Feldblum's avatar
      Cut Try ctor taking std::exception_ptr · a9ff35f4
      Yedidya Feldblum authored
      Summary:
      [Folly] Cut `Try` ctor taking `std::exception_ptr`.
      
      It is legacy, from a time before `exception_wrapper`.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8110107
      
      fbshipit-source-id: 2d8f4d56fdf1043012d72813a8686a8d02392a0b
      a9ff35f4
    • Yedidya Feldblum's avatar
      Cut Promise::setException overload taking std::exception_ptr · 5556aa3d
      Yedidya Feldblum authored
      Summary:
      [Folly] Cut `Promise::setException` overload taking `std::exception_ptr`.
      
      It is from a time before `exception_wrapper`.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8110117
      
      fbshipit-source-id: f3a3f150267efc8c22a83dc90c7f52a728ef3de7
      5556aa3d
    • Yedidya Feldblum's avatar
      Cut SharedPromise::setException overload taking std::exception_ptr · bf7c9957
      Yedidya Feldblum authored
      Summary:
      [Folly] Cut `SharedPromise::setException` overload taking `std::exception_ptr`.
      
      It is from a time before `exception_wrapper`.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8132039
      
      fbshipit-source-id: eb82f6b766fd5cf82443ef447bbc751e7319f0ab
      bf7c9957
    • Jeffrey Shen's avatar
      Add a way to schedule runs for startDelay modulo interval · 142c1e1a
      Jeffrey Shen authored
      Summary:
      Currently, scheduling only allows specifying an interval, not the next run time. This makes it impossible to schedule for a given startDelay modulo the interval. This refactors things internally to use a customizable NextRunTimeFunc, and exposes a way to run at a consistent startDelay or pass in a NextRunTimeFunc.
      
      A use case: if we have n FunctionSchedulers schedule with different startDelays but the same interval, and they sync up (e.g. they all get blocked on some IO call, which eventually gets fixed), then they won't unsync or will unsync slowly.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7651111
      
      fbshipit-source-id: 3c7a49dbfaa073b913107474f039a53a0a03cfa0
      142c1e1a
  2. 24 May, 2018 9 commits
    • Andre Pinto's avatar
      Fix build on 32-bit platforms · aaa4b610
      Andre Pinto authored
      Summary: This fixes a compile error on 32-bit platforms.
      
      Reviewed By: Orvid
      
      Differential Revision: D8147916
      
      fbshipit-source-id: 86b66b684bed5ffb262630a361cf239948b8bb97
      aaa4b610
    • Andrii Grynenko's avatar
      Fix Executor unsetting in waitVia · 9af54d9a
      Andrii Grynenko authored
      Reviewed By: yfeldblum
      
      Differential Revision: D8134836
      
      fbshipit-source-id: 0b736bd61aa024574756634358ddc0e45c31944b
      9af54d9a
    • Marshall Cline's avatar
      add contracts to Promise · 87ab4855
      Marshall Cline authored
      Summary: Add contracts to Promise
      
      Reviewed By: LeeHowes
      
      Differential Revision: D7923804
      
      fbshipit-source-id: f7f29646d523ee69f00ac8576e2edf7e003f25e3
      87ab4855
    • Subodh Iyengar's avatar
      Add detachEvb to AsyncUDPSocket · b02ec278
      Subodh Iyengar authored
      Summary:
      Detach evb from asyncudpsocket to be able to
      switch the socket between threads
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8131599
      
      fbshipit-source-id: 5d2a6f9b43b72076da1f6c09ce37b3c0bcd43db2
      b02ec278
    • Maged Michael's avatar
      hazptr: Rename await_zero_bulk_reclaims to wait_for_bulk_reclaim · e2a84628
      Maged Michael authored
      Summary: Change name to reserve the word await for coroutines.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8076750
      
      fbshipit-source-id: 38771dc22c39e194888ac272299ec1ae83df6389
      e2a84628
    • Stepan Palamarchuk's avatar
      Add const versions of begin/end · a6fc9c0a
      Stepan Palamarchuk authored
      Summary:
      `ConcurrentHashMap` provides `cbegin` and `cend`, but they are not suitable for range-based loops.
      This diff adds const versions of `begin` and `end` that are required for range-based loops.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8131142
      
      fbshipit-source-id: b3af164d403c86ddfe4d27aaca293fbc4e2bb9d2
      a6fc9c0a
    • Marshall Cline's avatar
      add class-level descrips to SemiFuture & Future · dfa07dcd
      Marshall Cline authored
      Summary: To expedite, I'm splitting the class-level summary-docs from the method-level docs. This is just the former.
      
      Reviewed By: LeeHowes
      
      Differential Revision: D7956570
      
      fbshipit-source-id: b38539082ac0f6537f20a4f1d5a097407c277adc
      dfa07dcd
    • Saif Hasan's avatar
      fix build · 509b213e
      Saif Hasan authored
      Summary:
      fbthrift generate errorneous code when cpp type IOBuf pointer is used. Let's use
      IOBuf object instead as it is cheap to copy construct and underlying buffer is
      anyway shared when objects are copied.
      
      Reviewed By: plapukhov
      
      Differential Revision: D8130040
      
      fbshipit-source-id: 3c109a85951054fed890707f56170b46cfefc917
      509b213e
    • Matthieu Martin's avatar
      Fix possible deadlock in GILAwareManualExecutor · 6616c8e8
      Matthieu Martin authored
      Summary:
      See code comment
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D8130722
      
      fbshipit-source-id: c2a3e4b0de1fe7d07e28c4a7558e4367a1591ac1
      6616c8e8
  3. 23 May, 2018 15 commits
    • Yedidya Feldblum's avatar
      Give Try constructors pedantic exception specifiers · 72cb9df4
      Yedidya Feldblum authored
      Summary: [Folly] Give Try constructors and assignment operators pedantic exception specifiers deriving from corresponding exception specifiers of element type.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8105158
      
      fbshipit-source-id: 3cc9aae022ddaeef3ef2b742dde8ba084bfca830
      72cb9df4
    • Yedidya Feldblum's avatar
      Make exception_wrapper be noexcept-copyable · be791fd5
      Yedidya Feldblum authored
      Summary:
      [Folly] Make `exception_wrapper` be `noexcept`-copyable.
      
      This works across the storage types:
      * InSitu - only store `noexcept`-copyable objects in-situ.
      * OnHeap - `std::shared_ptr` is `noexcept`-copyable.
      * Thrown - `std::exception_ptr` is in practice `noexcept`-copyable since it is a smart-ptr for thrown objects.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8109991
      
      fbshipit-source-id: e637c72466b22ab3076f52b4654a7538dcb1d30f
      be791fd5
    • Andrii Grynenko's avatar
      Use Executor::KeepAlive to store Executor in Core · b3e7e89c
      Andrii Grynenko authored
      Reviewed By: yfeldblum
      
      Differential Revision: D8022229
      
      fbshipit-source-id: 1ba1d777cbbeb1d1ad95dc3f4bae6b3d431b9440
      b3e7e89c
    • Dan Melnic's avatar
      Back out "Iterate only through the threads that have in use entries" · 360d0d32
      Dan Melnic authored
      Summary:
      Original commit changeset: 577063f920fb
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: djwatson
      
      Differential Revision: D8126439
      
      fbshipit-source-id: 30154738262274a688f432465119b0730d395df6
      360d0d32
    • Yedidya Feldblum's avatar
      Invoke Futures then-continuations with the same cvref as passed · 9a4f6fdc
      Yedidya Feldblum authored
      Summary:
      [Folly] Invoke Futures `then`-continuations with the same cvref as passed.
      
      for example, if passed as `const&&`, invoke as `const&&`, and if passed as `volatile&`, invoke as `volatile&`.
      
      This brings a little more consistency to the library.
      
      Reviewed By: LeeHowes, phoad
      
      Differential Revision: D8109784
      
      fbshipit-source-id: 8dd56c6197211091ed53eba94aeec9d604268d15
      9a4f6fdc
    • Yuchen Dai's avatar
      fix atomic::store bad usage · a07a458a
      Yuchen Dai authored
      Summary:
      Fix usage of atomic::store() where memory order is the only argument.
      
      It worked because of memory_order value is implicit casted to correct value luckily.
      
      Reviewed By: djwatson
      
      Differential Revision: D8108348
      
      fbshipit-source-id: 7c4050b8cb50ec3ab6977cd9adce45249130320c
      a07a458a
    • Orvid King's avatar
      Fix MSVC build · c9ecca96
      Orvid King authored
      Summary: I broke the build because MSVC versions prior to Visual Studio 2017 Update 7 failed to compile it :)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8107563
      
      fbshipit-source-id: 0c8f97325fd76a56d335ff71c9b969ad2bfaa5a1
      c9ecca96
    • Dan Melnic's avatar
      Iterate only through the threads that have in use entries · 211921c8
      Dan Melnic authored
      Summary: Iterate only through the threads that have in use entries
      
      Reviewed By: djwatson
      
      Differential Revision: D7931363
      
      fbshipit-source-id: 577063f920fb432e255a59e90faa32ab72107124
      211921c8
    • Yedidya Feldblum's avatar
      Minimize AtFork deps · 4bfa2a85
      Yedidya Feldblum authored
      Summary: [Folly] Minimize `AtFork` deps by using removing use of `checkPosixError`. The owning library is a bit heavyweight.
      
      Reviewed By: simpkins
      
      Differential Revision: D8109884
      
      fbshipit-source-id: a0a41ff64fd44b843970ae30f8fdb8ff4ff22acd
      4bfa2a85
    • Aaron Orenstein's avatar
      Mark non-linux unused parameters as unused · 3384af41
      Aaron Orenstein authored
      Summary: Mark non-linux unused parameters as unused
      
      Reviewed By: yfeldblum, Orvid
      
      Differential Revision: D8103305
      
      fbshipit-source-id: dc67849177e95718d0d6d658d1e2af88e867d81f
      3384af41
    • Orvid King's avatar
      Don't truncate window size · 0cb0a734
      Orvid King authored
      Summary: As per title.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8103967
      
      fbshipit-source-id: 27fbc45df3ee1ec8934ea3c16aaa490fb06ef622
      0cb0a734
    • Orvid King's avatar
      Back out "[Folly] [MSVC] Workaround MSVC 15.7 bug" · 5ef66c9e
      Orvid King authored
      Summary: Visual Studio 2017 Update 7.2 is out, so this is no longer needed. This should fix GCC 4.9 as well :)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8104179
      
      fbshipit-source-id: e3b01c2f7f0fe69dc7286d2cfaa5c2c99d821b23
      5ef66c9e
    • Nick Terrell's avatar
      Add support for advanced zstd options · 660c0417
      Nick Terrell authored
      Summary:
      * Use the new advanced API.
      * Support all advanced compression options and decompression window size.
      * Dictionary support is easy to add later when needed.
      * Remove the one-pass optimizations since zstd supports them by default now.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7898697
      
      fbshipit-source-id: 42d84808a9bf2200ebfb8d2071b853960a19eb79
      660c0417
    • Matthieu Martin's avatar
      Introduce GILAwareExecutor · d0142327
      Matthieu Martin authored
      Summary: A simpler manual executor that can be executed by a python thread, and release the GIL while waiting.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D8087779
      
      fbshipit-source-id: a75ecbda3804a53f1b705aa04546b74368738b7b
      d0142327
    • Matthieu Martin's avatar
      Rename AsyncioLoopController to ExecutorLoopController (and move to fibers/) · 5981f1bb
      Matthieu Martin authored
      Summary:
      AsyncioLoopController is totally generic.
      We were able, after all, to put all the python specifics in the Executor, and keep it simple.
      I'm using it with ManualExecutor succesfully in my project.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D8085689
      
      fbshipit-source-id: 007f65a72e41aa98113b7ee4e188719d9bc20340
      5981f1bb
  4. 22 May, 2018 5 commits
  5. 21 May, 2018 1 commit
    • Yedidya Feldblum's avatar
      Introduce makePromiseContract · 57b57616
      Yedidya Feldblum authored
      Summary:
      [Folly] Introduce makePromiseContract, for producing a paired promise-and-semi-future or a paired promise-and-future, depending on which overload is invoked.
      
      It is not ideal that a future is gotten from a promise, but only once. Rather, it is ideal that they be created together.
      
      C++17 code may use structured bindings:
      ```lang=c++
      auto [p, f] = makePromiseContract(); // promise with semi-future
      auto [p, f] = makePromiseContract(&e); // promise with future, given executor e
      ```
      
      Reviewed By: LeeHowes
      
      Differential Revision: D7984050
      
      fbshipit-source-id: 52ee5624fde7c48aa0e81243564ad067c6c6919f
      57b57616
  6. 20 May, 2018 2 commits
    • Orvid King's avatar
      Add collectAllSemiFuture and implement collectAll in terms of it · 4d6d653e
      Orvid King authored
      Summary: This will allow incremental migration of `collectAll` to `collectAllSemiFuture`. Once everything is migrated to `collectAllSemiFuture`, `collectAll` will change to be the exact same as `collectAllSemiFuture`, then all uses will be moved back to `collectAll` and `collectAllSemiFuture` will be removed.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8015664
      
      fbshipit-source-id: 07a154dc733fd7e1e003f4c103355e7b5d1ad1b5
      4d6d653e
    • Maged Michael's avatar
      hazptr: Optimize size and speed of hazptr_holder and hazptr_array · 62c3a982
      Maged Michael authored
      Summary:
      Add hazptr_domain* member to hazptr_rec that never changes.
      Remove hazptr_domain* member from hazptr_holder.
      
      The primary optimization is reducing the sizes of hazptr_holder and hazptr_array from two pointers to one pointer per owned hazard pointer.
      
      A secondary advantage is allowing swap of an individual holder in hazptr_array with a hazptr_holder object or an element of another hazptr_array under the conditions: both are either empty or nonempty and if nonempty both hazptrs belong to the same domain.
      
      Performance effects on hazptr_holder:
      + Half the steps for empty construction, move and swap.
      + One less step in typical construction.
      - Indirect instead of direct read of pointer to domain, but indirection is likely to be a cache hit if the hazptr was used recently.
      
      Measurements:
      - Faster construction/destruction of hazptr_array<3>. 7.5 ns. instead of 8.5 ns.
      - No regression in other microbenchmarks.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D8010395
      
      fbshipit-source-id: 01ffd26f675e57547b1506b777c79d18052ccc65
      62c3a982
  7. 19 May, 2018 4 commits
    • Maged Michael's avatar
      hazptr: Link counting. Protecting descendants of protected objects. Mutable... · e56afab1
      Maged Michael authored
      hazptr: Link counting. Protecting descendants of protected objects. Mutable and immutable links. Automatic retirement.
      
      Summary:
      The class hazptr_obj_linked includes all the reference counting and automatic retirement mechanisms. It supports:
      - Mutable and Immutable links.
      - Certain and uncertain removal. With certain removal users call retire. With uncertain users call unlink when an object is unlinked. The library determines automatically when to retire such object.
      - E.g., UnboundedQueue uses immutable links with certain removal.
      - E.g., ConcurrentHashMap uses mutable links with uncertain removal.
      
      Reviewed By: djwatson
      
      Differential Revision: D7674658
      
      fbshipit-source-id: 948f5c3690367deaa0e2023a2def3bed2c22b9f0
      e56afab1
    • Andrii Grynenko's avatar
      Move CPU/IOThreadPoolExecutor keep-alive logic into ThreadPoolExecutor · f8651741
      Andrii Grynenko authored
      Summary: This makes keep-alive join also happen if stop/join are called directly.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8060479
      
      fbshipit-source-id: 1d1c0cdbcaac2e439aee9ad14f00fa7e4fda2339
      f8651741
    • Andrii Grynenko's avatar
      Implement loopIgnoreKeepAlive() · 109f7655
      Andrii Grynenko authored
      Summary:
      This is useful to fix legacy tests that use loop(), as keep-alive tokens are used more widely.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8065959
      
      fbshipit-source-id: 2e7a27f538ac9d36eeea7ba3a882633a193141d1
      109f7655
    • Yedidya Feldblum's avatar
      Split Futures exceptions by Promise vs Future · 09c8a80a
      Yedidya Feldblum authored
      Summary:
      [Folly] Split Futures exceptions by `Promise` vs `Future`.
      
      * Move `Promise` exceptions into the `Promise` header.
      * Move `Future` exceptions into the `Future` header.
      * Split `NoState` into `PromiseInvalid` and `FutureInvalid`.
      * Remove the newly-empty exceptions header.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D7966499
      
      fbshipit-source-id: 2dc6d2a941493979ebf47b3e70e5cf6a6fbd33cf
      09c8a80a