- 08 Nov, 2016 2 commits
-
-
James Sedgwick authored
Summary: this diff adds tryReadUntil, which is a mirror of tryWriteUntil in both function and implementation. Two bugs were exposed in the process of implementing and testing tryWriteUntil; they are fixed as well and are as follows: 1. tryObtainPromisedPopTicket didn't assign to the passed ticket return reference in the failure case 2. TurnSequencer::tryWaitForTurn() didn't distinguish between past turns and timeouts in the failure case; they need to be differentiated because SingleElementQueue::tryWaitFor{De/En}queue() should only fail in the timeout case, not if the turn has passed. The two added unit tests are admittedly clumsy, but making the obvious simplifications to them keeps them from triggering the premature timeout race caused by bug 2 above, so I kept them as is. Reviewed By: magedm Differential Revision: D4050515 fbshipit-source-id: b0a3dd894d502c44be62d362ea347a1837df4c2f
-
Andrew Gallagher authored
Summary: These functions contain static locals which need to be exported to the global dynamic symbol table to get deduplicated at runtime. Since using `-fvisibility-inlines-hidden` demotes the visibility of these static locals, explicitly tag them. Reviewed By: yfeldblum Differential Revision: D4139154 fbshipit-source-id: 08b81721c6c945ac5556472481ae771d0eeb5f88
-
- 07 Nov, 2016 2 commits
-
-
Stepan Palamarchuk authored
Summary: `prepareReadBuffer` is calling a callback function that is not a noexcept also `prepareReadBuffer` is being called only from one place, that wraps this function call with try/catch. Reviewed By: jmswen Differential Revision: D4138424 fbshipit-source-id: a05bdd6f741761567a7d0291017c285b0bf15522
-
Andrew Gallagher authored
Summary: This tags certain static locals, wich may get duplicated via dynamic linking and inlining, as safe to have multiple copies at runtime, making this subtle behavior explicit. Reviewed By: igorsugak Differential Revision: D4082929 fbshipit-source-id: ba4e23cb121e957a43f5659a1ca3432cb89cb8f3
-
- 06 Nov, 2016 1 commit
-
-
Yedidya Feldblum authored
Summary: [Folly] Let `folly::range` be `constexpr`. It will be useful to have this helper function be `constexpr` to support further compile-time code. Reviewed By: juchem Differential Revision: D4135943 fbshipit-source-id: a62be93f9e492ca302130d1a3b190ed4b69f7a80
-
- 05 Nov, 2016 1 commit
-
-
Christopher Small authored
Summary: add operator== against nullptr_t for ReadMostlySharedPtr Reviewed By: andriigrynenko, nbronson, yfeldblum Differential Revision: D4128722 fbshipit-source-id: 40d08bb85bfe2f96ad4ed4995f5829e0616d0661
-
- 04 Nov, 2016 2 commits
-
-
Zach Amsden authored
Summary: Eden uses this and won't build with OSS folly without it. Reviewed By: Orvid Differential Revision: D4132103 fbshipit-source-id: 68d6c7dc642a7401eca60b0713db9f90cc11ced1
-
Mirek Klimos authored
Summary: Changed RWSpinLock to a SharedMutex in the RequestContext to see if this would lower the overhead of the onSet/onUnset callbacks. Reviewed By: djwatson Differential Revision: D3780396 fbshipit-source-id: 3d91f8194357533072fe053d23e0454a36faecff
-
- 03 Nov, 2016 8 commits
-
-
Kyle Nekritz authored
Summary: This allows getting up to n bytes from the queue without first having to check the length. Reviewed By: yfeldblum Differential Revision: D4083484 fbshipit-source-id: 2a468992c97f036c22f1a0d9f830e6d5286a4bc2
-
Kyle Nekritz authored
Summary: This is helpful for parsing data IOBufs in reverse. Reviewed By: siyengar Differential Revision: D4082810 fbshipit-source-id: 6a201d25e7d22befe28f92e4a1d7aa41ad7d6817
-
Louis Brandy authored
Summary: gcc-4.9 doesn't appreciate this clever loop and worries about `prev` being uninitialized on first use. Assuming the rest of the program behaves properly and preserves the invariant this code is expecting, this isn't bugged. But let's initialize it anyway. Reviewed By: meyering Differential Revision: D4120746 fbshipit-source-id: 1a7c323a4b6296a81768a62dd7d72337c5c35bf0
-
Jim Meyering authored
Reviewed By: yfeldblum Differential Revision: D4120553 fbshipit-source-id: 87c202232bcfabeff7eb62a8133b9b5577b09cbc
-
Jim Meyering authored
Summary: There was a doubly-nested loop, both with index "i". Change the inner for-loop index from i to j. Reviewed By: yfeldblum Differential Revision: D4120589 fbshipit-source-id: c786d8f7bb1ee05fc990db898b15836032e93940
-
Jim Meyering authored
Reviewed By: jsedgwick Differential Revision: D4120563 fbshipit-source-id: c97645a068662e41d5038bcd1e9805bdf6f0490c
-
Ameya Limaye authored
Summary: Allow getting the sequence number of a token via a read only getter function Reviewed By: yfeldblum Differential Revision: D4120900 fbshipit-source-id: b664dda29d13a1755e041ab9c33c0d7324690ba7
-
Andrii Grynenko authored
Reviewed By: yfeldblum Differential Revision: D4086486 fbshipit-source-id: bd0cca8dd2c9b74d5c30e4cd095191c1d1ecab79
-
- 02 Nov, 2016 3 commits
-
-
Tudor Bosman authored
Summary: Solves #509 by creating a libtool convenience library that's compiled with -msse4.2. Closes https://github.com/facebook/folly/pull/510 Differential Revision: D4120400 Pulled By: yfeldblum fbshipit-source-id: bf5d937dc37ef8707e755c89f1883d65b4d21b0f
-
Philip Pronin authored
Summary: We would like to guarantee that after `folly::ThreadLocal<>` dtor returns no per-thread instances are longer alive. Currently this is not a case: * T1 is excuting `StaticMetaBase::onThreadExit()`, it acquired all per-thread instances and erased them from meta under `accessAllThreadsLock_`. * T2 destroys `folly::ThreadLocal<>`, it executes `StaticMetaBase::destroy()`, collects all per-thread instances (thus missing the ones being destroyed by T1), destroys them and returns. * T1 executes dtor of per-thread instances, after parent `folly::ThreadLocal<>` dtor is finished. Reviewed By: ot Differential Revision: D4109820 fbshipit-source-id: d547b8cc77c9871126538c38644c2e98ddccf220
-
Ameya Limaye authored
Summary: Make sequence number in AtomicBatchDispatcher<....>::Token non-const: - The field is already private and having it as const prevents a move assignment operator from getting defined Reviewed By: yfeldblum Differential Revision: D4114851 fbshipit-source-id: 9f7a4003daff02c007c01747cca6ae9da17fcb79
-
- 01 Nov, 2016 7 commits
-
-
Christopher Dykes authored
Summary: MSVC doesn't allow uninitialized non-`extern` `const` declarations, but we can't mark them `extern` because they are part of a template specialization. We also can't initialize them, because they'd conflict with the definition specializations in the generated tables. As the forward-declarations aren't required for it to work under MSVC, as the specializations are found appropriately, just don't declare the specializations under MSVC. Reviewed By: yfeldblum Differential Revision: D4098282 fbshipit-source-id: 84b73d63bbe6cf9c54b7fe7a3bfc2488699df7c2
-
David Callahan authored
Summary: In the next revision of clang, compilation generates multiple erroes of the form folly/TokenBucket.h:127:29: error: exception specification is not available until end of class definition double nowInSeconds = defaultClockNow()) { which are eliminated by reordering the method declaration for defaultClockNow() Refer https://llvm.org/bugs/show_bug.cgi?id=30860 Reviewed By: philippu, yfeldblum Differential Revision: D4107443 fbshipit-source-id: ce64f2ae7983e533c2fcb5cb043dbdd3da5c00f7
-
Christopher Dykes authored
Summary: MSVC doesn't support them, so use dynamic allocation instead. This also fixes a place where MSVC wasn't propogating the constexpr-ness of a local into the body of a lambda, resulting in an attempt to create a VLA. Reviewed By: yfeldblum Differential Revision: D4098932 fbshipit-source-id: 742b2fcd96f7f6eceb5043159403d557f7fc9673
-
Christopher Dykes authored
Summary: Clang and GCC allow it, but the spec, and MSVC, don't, so use uint16_t instead. Reviewed By: yfeldblum Differential Revision: D4099285 fbshipit-source-id: cdf7ba14b6c00e1bcdfc3650b76e6e4a47a61929
-
Christopher Dykes authored
Summary: Silence a couple of warnings that get very spammy for MSVC. Reviewed By: yfeldblum Differential Revision: D4098682 fbshipit-source-id: b410b56062cdf82367675ea9c3dd22975e7b91bd
-
Andrii Grynenko authored
Reviewed By: yfeldblum Differential Revision: D4100221 fbshipit-source-id: 7778b48f1bba9be85f5712f61d6e1731524901c3
-
Andrii Grynenko authored
Summary: Instead of exposing raw jumpContext, it now exposes a higher-level FiberImpl class, which can be extended for newer versions of jump_fcontext. Reviewed By: yfeldblum Differential Revision: D4099849 fbshipit-source-id: 28c7ce32284a0109cf040c264d46a31a45867934
-
- 31 Oct, 2016 8 commits
-
-
Andrii Grynenko authored
Summary: A cleanup in preparation to make folly::fibers work with newer boost. Reviewed By: jsedgwick Differential Revision: D4093947 fbshipit-source-id: e9a0aaeb915c40af96282169d4758afe572f2dd8
-
Maged Michael authored
Summary: The main purpose of this diff and this library at this point is to be a public reference for the C++ standard committee and whoever is interested in the proposal to the committee. This diff aims to be consistent with the latest version of the proposal (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0233r2.pdf). The current interface proposal focuses on the core components (domain, object base, and raii owner). Once, that part is settled we can add to the interface: - Thread local options (thread caching of hazard pointers and private storage of retired objects) - Programmer control of reclamation (when and by which threads) Also, at this point the implementation does not optimize memory ordering. I removed hazptr_domain::try_reclaim() from the public interface at this point. The latest update to interface aims to relieve the programmer from the need to take spacial precautions against shutdown fiascos involving reclamation functions of objects stored by the default domain. Please let me know if you have any concerns about this. Having said that about the current purpose of this library, I really appreciate any comments (in this diff or separately) on the interface in general and any suggestions for the eventual optimized implementation. Reviewed By: davidtgoldblatt Differential Revision: D4104381 fbshipit-source-id: df98adf6fd9b7a93406cb8eeca8fe2ad12388139
-
Lucian Grijincu authored
Summary: #accept2ship Reviewed By: jsedgwick Differential Revision: D4105140 fbshipit-source-id: eca1f7066e514ec3c5d316f974edc34e03872784
-
Christopher Dykes authored
Summary: Winsock defines the internals of `in6_addr` in its own way, so we have to account for that. Reviewed By: jsedgwick Differential Revision: D4099453 fbshipit-source-id: c0ebb4e2017f61bed7d5d63058161ef3f16f9a65
-
Christopher Dykes authored
Summary: If multiple iovs are passed to sendmsg, sendmsg is supposed to return the number of bytes sent if it would block, but only if the number of bytes sent is greater than 0. Reviewed By: yfeldblum Differential Revision: D4099691 fbshipit-source-id: e58fa71604966129b1fbd418c24b1bf012060428
-
Ameya Limaye authored
Summary: Implement AtomicBatchDispatcher in folly::fibers - Details about how to use the added functionality can be found in the doc comment for class AtomicBatchDispatcher. Reviewed By: andriigrynenko Differential Revision: D4054148 fbshipit-source-id: 090272eeab8c8abb15d5e400e52725853fcfc364
-
Kyle Nekritz authored
Summary: Previously we set the cork option on the socket before making multiple writes, and then unset it after, which elip found was hurting perf with 2 extra syscalls. The cork logic was also not the same as the buffer combining logic, which made us often set cork even when only doing one write. Reviewed By: djwatson Differential Revision: D4058357 fbshipit-source-id: 1a07447ff5e027751e455a2403e0042bf67cb1c5
-
Nathan Bronson authored
Summary: A common failure mode for folly::doNotOptimizeAway is to pass it a pointer to a complex object that the caller wants to ensure is fully calculated, which doesn't actually ensure that. Also, the GCC and MSVC implementations used inline assembly with an in-out parameter, which causes a store. A survey of many usages of doNotOptimizeAway found only 1 that relies on this make-unpredictable behavior. This diff makes doNotOptimizeAway(&x) equivalent to doNotOptimizeAway(x) for GCC and clang, and makes it a read-only sink. For the rare case that the benchmark wants to disable subexpression elimination, constant propagation, or power reduction, there is a new function makeUnpredictable. It also merges the clang and GCC implementations, removing a potential bias in our microbenchmarks. Reviewed By: davidtgoldblatt Differential Revision: D4074670 fbshipit-source-id: 43f02e7fe149147bb172babe77787dea06e098fa
-
- 29 Oct, 2016 1 commit
-
-
Christopher Dykes authored
Summary: In this case, the SpookyHash tests, which call `clock_gettime`. Reviewed By: yfeldblum Differential Revision: D4098997 fbshipit-source-id: e402fd6626e59ccc555513384e93ef0ef891bbf3
-
- 28 Oct, 2016 1 commit
-
-
Christopher Dykes authored
Summary: If Folly was compiled without support for SSE 4.2, but this function ends up getting called, we'd abort due to the check failing. To solve this, just don't do the check and fall back to the non-sse version. This is reasonable because it means that the code calling `qfind_first_byte_of_sse42` only needs to care whether there is CPU support for SSE 4.2, not whether we were able to actually implement the search with SSE 4.2 based on compiler support. Reviewed By: yfeldblum Differential Revision: D4096645 fbshipit-source-id: d26a791c09f61595e40c84c47a7a2596b9b69c1e
-
- 27 Oct, 2016 1 commit
-
-
Andrew Gallagher authored
Summary: When using `-fvisibility-inlines-hidden` or using C/C++ shared libs transitively from a Python binary, static locals in inline functions can potentially have more than one definition at runtime. This diff explicitly marks this static local as safe for this scenario. Reviewed By: djwatson Differential Revision: D4082831 fbshipit-source-id: 75616ac26a39f44691ef59b889ea555e9daa391b
-
- 26 Oct, 2016 2 commits
-
-
Giuseppe Ottaviano authored
Summary: Now that the initializer list syntax has been removed we can add a default constructor. Also, - The `dynamic(T)` constructor was unconstrained, so it would match any type but then fail to compile (as a side effect, `is_convertible<T, dynamic>` would be always true). This also leaked the implementation details of `Array` and `Object`, as they were accepted as arguments. The diff makes the constructor accept only integral and float arguments, and all other types are SFINAEd out. - `dynamic(Iterator, Iterator)` is made `explicit` to avoid accepting statements like `dynamic d = {"a", "b"};`. - `object(...)` methods are simplified. Reviewed By: luciang Differential Revision: D4065021 fbshipit-source-id: ac289da7bece67c674b7036b7b51d5e016b297e5
-
Andrew Gallagher authored
Summary: This refactors inline functions defined in headers which had static locals so that their definition is moved to the corresponding implementation file. Reviewed By: yfeldblum Differential Revision: D4049175 fbshipit-source-id: 56eeb82eb23b04c3b9940d803d05050949aa5ef9
-
- 25 Oct, 2016 1 commit
-
-
Matthieu Martin authored
Summary: A bit more clear Reviewed By: yfeldblum Differential Revision: D4075931 fbshipit-source-id: 1398500336d412b5e7663ef1e67b20a329ce2979
-