1. 31 Aug, 2016 5 commits
    • Zonr Chang's avatar
      Consolidate namespace for using GFlags. · 9d7ab809
      Zonr Chang authored
      Summary:
      Default namespace for GFlags has been changed from "google" to "gflags".
      
      See: https://github.com/gflags/gflags/commit/d9d06b9.
      Closes https://github.com/facebook/folly/pull/466
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3787144
      
      Pulled By: Orvid
      
      fbshipit-source-id: db7bcaf4e2bcd46b022a48b17b50ef155570f296
      9d7ab809
    • Philip Pronin's avatar
      Reverted commit D3755446 · f8908e51
      Philip Pronin authored
      Summary:
      Move ThreadLocal object destruction to occur under the lock to avoid races.
      This causes a few cascading changes - the Tag lock needs to be a recursive_mutex so
      constructing a new object while destroying another st. Also, forking requires
      a new mutex to avoid deadlocking on accessing a recursive_mutex across a fork()
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D3755446
      
      fbshipit-source-id: f1f1f92175eb39e77aaa2add6915e5c9bb68d0fb
      f8908e51
    • Naizhi Li's avatar
      Fix folly::SocketAddress::reset · 8c3d0bc9
      Naizhi Li authored
      Summary:
      Currently reset does not actually reset it. This change
      make sure it does the job.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3788869
      
      fbshipit-source-id: 771a641e31bb3cf307e5bebb979b81a3d3feea55
      8c3d0bc9
    • Gabriel Grise's avatar
      Expose SSL key materials to debug SSL · 4458ae04
      Gabriel Grise authored
      Summary: Adding two methods to export the parameters used to generate the key material   (key_block). These parameter can be used to decrypt a TLS session from a packet capture.
      
      Reviewed By: anirudhvr
      
      Differential Revision: D3687099
      
      fbshipit-source-id: 04137f34dd32c387a1b7aec04b3ed6066f123a8e
      4458ae04
    • Michael Lee's avatar
      Use a normal variable if thread local is not available. · e081efca
      Michael Lee authored
      Summary: This should not affect correctness, but it means SharedMutex would need to share the variable across threads.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3621227
      
      fbshipit-source-id: dc1baa7c47cd2d459cd0ef89451bcd7fd4d553aa
      e081efca
  2. 30 Aug, 2016 5 commits
  3. 29 Aug, 2016 7 commits
    • Dan Schatzberg's avatar
      Fix ThreadCachedInt race condition · bae33d68
      Dan Schatzberg authored
      Summary:
      Move ThreadLocal object destruction to occur under the lock to avoid races.
      This causes a few cascading changes - the Tag lock needs to be a recursive_mutex so
      constructing a new object while destroying another st. Also, forking requires
      a new mutex to avoid deadlocking on accessing a recursive_mutex across a fork()
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D3755446
      
      fbshipit-source-id: bb4c4f29bab98d763490df29b460066f124303e0
      bae33d68
    • Andrii Grynenko's avatar
      Resolve fibers-futures dependency · c93226d1
      Andrii Grynenko authored
      Reviewed By: mzlee
      
      Differential Revision: D3780312
      
      fbshipit-source-id: c42c8f0a06b82520ee1b46f105a2a85ad524c442
      c93226d1
    • Yedidya Feldblum's avatar
      gen::dereference should perfectly-forward unwrapped values · 2dedc14b
      Yedidya Feldblum authored
      Summary:
      [Folly] `gen::dereference` should perfectly-forward unwrapped values.
      
      The problem comes in when the wrapped value is not actually a pointer, but is actually an rvalue-ref to some other kind of wrapper type with `Inner&& operator*() &&`. In such cases, the compiler emits a type mismatch error that it cannot cast `Inner` to `Inner&&`, with the errors originating in `Dereference::foreach` and `Dereference::apply`.
      
      Fixes a couple other missing-forwarding and extra-forwarding bugs.
      
      Reviewed By: ddrcoder
      
      Differential Revision: D3776617
      
      fbshipit-source-id: 6926fc18244a572846b22d428bd407d37fb20aa1
      2dedc14b
    • Yedidya Feldblum's avatar
      Use Synchronized in RequestContext · 214d5f7c
      Yedidya Feldblum authored
      Summary:
      [Folly] Use `Synchronized` in `RequestContext`.
      
      Because we can. And it makes the code a tad simpler and also enforces access correctness a tad.
      
      Also use `folly::make_unique` in `RequestContextTest` to keep balance between the explicit `new` and `delete` ops.
      
      Reviewed By: markisaa
      
      Differential Revision: D3781115
      
      fbshipit-source-id: 63b41ddd8009e9546e3be5f89bdd23a4d791105c
      214d5f7c
    • Nick Terrell's avatar
      Add default constructor to folly::IOBuf::Iterator. · b90a2ba5
      Nick Terrell authored
      Summary:
      Iterators must be default constructible.
      folly::IOBuf can now be used as a range in ranges-v3.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3782536
      
      fbshipit-source-id: 854813b4e3336aba50048649e6ae7b375d49e382
      b90a2ba5
    • Jon Maltiel Swenson's avatar
      Fix up TokenBucket.h in Makefile headers · 7259fd8c
      Jon Maltiel Swenson authored
      Summary: Title.
      
      Reviewed By: andreazevedo
      
      Differential Revision: D3785212
      
      fbshipit-source-id: c551e0367196cbc68cf39a5d40f2b324883fcdf4
      7259fd8c
    • Philipp Unterbrunner's avatar
      Generalized and polished folly::TokenBucket · 07802d90
      Philipp Unterbrunner authored
      Summary: Added support for user-defined clock classes, improved comments, and removed part of the std::atomics use that had no effect on thread-safety.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3708378
      
      fbshipit-source-id: 1a933c3707c12311584a3b33afd773ee91577167
      07802d90
  4. 26 Aug, 2016 6 commits
    • Lee Howes's avatar
      Added fiber-compatible semaphore. · dcf0273a
      Lee Howes authored
      Summary: Adds a standard semaphore type with signal and wait methods that is safe to use in both multi-threaded contexts and from fibers.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D3778943
      
      fbshipit-source-id: 6997f1fb870739e07f982399dbebfd8b3e45daa2
      dcf0273a
    • Christopher Dykes's avatar
      Use folly::Random and ensure M_PI is defined · 0decb439
      Christopher Dykes authored
      Summary: Because MSVC doesn't have `random()` and `M_PI` is guarded by a pre-processor macro.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3767159
      
      fbshipit-source-id: fcb1c41cd75925455c76efad38423cd52bd98aeb
      0decb439
    • Yunqiao Zhang's avatar
      collectOne · da9e05e8
      Yunqiao Zhang authored
      Summary:
      The resultant future of collectOne will be fulfilled when the first one of
      the future in the list completes without exception. If all input futures throws
      exception, the resultant future will get the last exception that was thrown.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D3764760
      
      fbshipit-source-id: 76484254e35182eddc8266865853d65c28170f82
      da9e05e8
    • David Goldblatt's avatar
      Add CachelinePadded<T> to folly. · e0ac799a
      David Goldblatt authored
      Summary:
      This class allows easy insertion of padding bytes after an object to ensure
      that two cacheline-padded elements of an array don't engage in false sharing.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3485144
      
      fbshipit-source-id: a3ece1e34566b20f94ff9f66532b2386ab19a9b1
      e0ac799a
    • Nicholas Ormrod's avatar
      Remove now-useless FOLLY_MALLOC_H_ · a4430933
      Nicholas Ormrod authored
      Summary:
      Malloc.h is intentionally included multiple times, once from folly and once from libstdc++. The current ###pragma once## implicitly allows this to happen. FBString.h has an undef for Malloc.h's include guard, which originally accomplished this goal.
      
      The undefing code is presently moot, since its functionality has been replaced by ###pragma once##. Remove it.
      
      I noticed this when ott was copying FBString over to libstdc++ in D3757853.
      The diff that switched the include guards to pragmas was a codemod, and was not specific to fbstring. D3054492
      
      Reviewed By: ot
      
      Differential Revision: D3758119
      
      fbshipit-source-id: e796d039a031d5f842ed39bf55a6b1aeb2686bc4
      a4430933
    • Christopher Dykes's avatar
      Use intrusive base hook rather than a member hook · 1bc610c2
      Christopher Dykes authored
      Summary: Because MSVC is not happy about the member hook when used in complex inheritence scenarios.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3774513
      
      fbshipit-source-id: 9e1ef8dd76d966de339f8486ff1a1d0ab1571849
      1bc610c2
  5. 25 Aug, 2016 6 commits
    • Christopher Dykes's avatar
      Suppress an abort in FileUtilTest under MSVC · 243fbe8d
      Christopher Dykes authored
      Summary: Because MSVC is right, this shouldn't be happening, but we test weird things.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3773486
      
      fbshipit-source-id: 50f28bf0ac8ff53f63231b4f6f9ce050b509b464
      243fbe8d
    • Christopher Dykes's avatar
      lseek returns the new offset, not 0 · ff5c9335
      Christopher Dykes authored
      Summary:
      With how this was written it would fail if the call to `lseek` failed, or if it succeeded, unless it was setting the length to 0, in which case it would succeed.
      This makes it work right.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3773311
      
      fbshipit-source-id: 3dc94502d0c4259f6f2766b4c0903c081d7c36ab
      ff5c9335
    • Christopher Dykes's avatar
      Allow locking nullptr if the length is 0 · 19c6708b
      Christopher Dykes authored
      Summary:
      Because apparently this is valid (and we test it).
      This also adds a check in mmap to make sure we aren't passing an invalid handle to `MapViewOfFileEx`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3772853
      
      fbshipit-source-id: 11593997a3fb12b7b391c5e52661060b71341aef
      19c6708b
    • Andrii Grynenko's avatar
      Fix SimplerObservable build with -Werror=unused-local-typedefs · 6a7f9395
      Andrii Grynenko authored
      Reviewed By: yfeldblum
      
      Differential Revision: D3765642
      
      fbshipit-source-id: 9b1cc4007c553da5082799fa4ed0af8f7850ec8d
      6a7f9395
    • Christopher Dykes's avatar
      Don't pass the single quote format parameter when formatting things · e4e0bbe1
      Christopher Dykes authored
      Summary:
      We are formatting an integer value, so it is doing absolutely nothing at all, as confirmed by the version I implemented for MSVC, which does output the value with digit separators, which fails the unit tests because the unit test expects the digit separators to not be present. What's more, whe specifically assert that the user has not requested digit separators in the format string.
      This also kills the MSVC special case entirely because it's not needed.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3768405
      
      fbshipit-source-id: 388cd0ca9699e257c71798b9bf355aa651748e60
      e4e0bbe1
    • Felix Handte's avatar
      Easy: Mark folly::static_function_deleter::operator() const · ff92b6ea
      Felix Handte authored
      Summary:
      First, folly::static_function_deleter::operator() is in fact a const
      operation, so this should be a reasonable change. The motivation for this is
      to make folly::ThreadLocalPtr and folly::static_function_deleter play nice with
      each other.
      
      Minimal example:
      ```lang=c++
      
      void deleter(int* ptr) {
        free(ptr);
      }
      
      int main(int argc, char* argv[]) {
        folly::ThreadLocalPtr<int> tl;
        tl.reset(std::unique_ptr<int, folly::static_function_deleter<int, deleter>>(
            new int(0)));
        return 0;
      }
      ```
      
      Currently produces:
      ```
      folly/ThreadLocal.h:207:7: error: no matching function for call to object of type 'const folly::static_function_deleter<int, &deleter>'
            delegate(ptr);
            ^~~~~~~~
      Test.cpp:10:6: note: in instantiation of function template specialization 'folly::ThreadLocalPtr<int, void>::reset<int, folly::static_function_deleter<int, &deleter>, void>' requested here
        tl.reset(std::unique_ptr<int, folly::static_function_deleter<int, deleter>>(new int(0)));
           ^
      folly/Memory.h:91:8: note: candidate function not viable: 'this' argument has type 'const folly::static_function_deleter<int, &deleter>', but method is not marked const
        void operator()(T* t) { f(t); }
             ^
      1 error generated.
      ```
      
      With the fix, the build succeeds.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3764624
      
      fbshipit-source-id: c28c791b79f1415704c205c36bfda2d888d6c010
      ff92b6ea
  6. 24 Aug, 2016 9 commits
    • Stephane Sezer's avatar
      Fix a typo in ScopeGuard.h · 64543f31
      Stephane Sezer authored
      Summary: Closes https://github.com/facebook/folly/pull/458
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3765911
      
      Pulled By: Orvid
      
      fbshipit-source-id: 30de0b99ec622471e52a775835b5a0564437febc
      64543f31
    • Christopher Dykes's avatar
      Don't assume unsigned long is 64-bit · 792c0340
      Christopher Dykes authored
      Summary: Because it isn't. Not on MSVC anyways.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3767326
      
      fbshipit-source-id: 0f9421773819999f99be38ae0646ae3e81bde4e4
      792c0340
    • Yedidya Feldblum's avatar
      Use cbegin and cend in static reflection container traits · aad1a0c5
      Yedidya Feldblum authored
      Summary:
      [Thrift] Use `cbegin` and `cend` in static reflection container traits.
      
      These are functions that all the C++ standard library containers have.
      
      And add the two methods to `folly::sorted_vector_set` and `folly::sorted_vector_map`.
      
      Reviewed By: juchem
      
      Differential Revision: D3763187
      
      fbshipit-source-id: 9d467a1cf391206eba671f454da428323c4a566a
      aad1a0c5
    • Christopher Dykes's avatar
      Allow building the NotificationQueue tests without event FDs · db014c85
      Christopher Dykes authored
      Summary:
      Because event file descriptors don't exist on Windows.
      This also disables the fork() test on Windows, as we don't have fork().
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3766266
      
      fbshipit-source-id: af8d81615957a3d7bdfcb204afbf648723921f76
      db014c85
    • Michael Callahan's avatar
      Explicit typecast of unused constant to make 32 bit compiler happy. · 0826d16b
      Michael Callahan authored
      Summary:
      GCC 5.3 is confused that we might be trying to assign a 64
      bit value to a 32 bit size_t although we are clearly not.  Just
      typecast the confusion away.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3762839
      
      fbshipit-source-id: 1b705c4e70b782fdb106844fee52ab25aa038acd
      0826d16b
    • Andrii Grynenko's avatar
      Cycle detection · 76745f68
      Andrii Grynenko authored
      Summary:
      1. This implements a GraphCycleDetector which can check if newly added edge belongs to a cycle in a directed graph. GraphCycleDetector is used to detect cycles between Observers when creator function is run.
      2. This also fixes a bug where new dependencies could be saved even if Observer creator failed.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3746743
      
      fbshipit-source-id: 99d10446c56fa4d8f7485f38309e8a282cd21bdf
      76745f68
    • Huapeng Zhou's avatar
      folly: fix enumeral vs non-enumeral type in conditional expression · 9ae9af6f
      Huapeng Zhou authored
      Summary:
      Titled.
      ```
      mcrouter/lib/carbon/CarbonProtocolReader.h:143:49:   required from here
      folly/small_vector.h:441:38: error: enumeral and non-enumeral type in conditional expression [-Werror]
      cc1plus: all warnings being treated as errors
      ```
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3763073
      
      fbshipit-source-id: da490e91cdb12dacf37d71c1796239bdc361a31b
      9ae9af6f
    • Jon Maltiel Swenson's avatar
      Prevent compiler warning about mixing enumeral and non-enumeral types in ternary expression · 2f5fcde0
      Jon Maltiel Swenson authored
      Summary:
      The GCC warning "warning: enumeral and non-enumeral type in conditional expression"
      is logged a lot in many builds since lots of code depends on small_vector.  This diff
      should prevent those warnings.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3762835
      
      fbshipit-source-id: 49831e4364e716592287c05d1dbf1912326324f6
      2f5fcde0
    • Phil Willoughby's avatar
      Fix a folly build failure with GCC5 · eb647573
      Phil Willoughby authored
      Summary:
      I tested it doesn't break the gcc 4.9 and clang builds - I didn't try any other versions of anything.
      
      build[all]
      
      Reviewed By: meyering
      
      Differential Revision: D3757152
      
      fbshipit-source-id: a126cd31cb89057dececfed1b265f452ee29fbff
      eb647573
  7. 23 Aug, 2016 2 commits
    • Heng Hong Lee's avatar
      AsyncSSLSocket getRawBytes fix · 4d37864c
      Heng Hong Lee authored
      Summary:
      While adding logging around our socket and looking into `AsyncSSLSocket` it seems like the data that is actually written into the socket is not correctly attributed.  I
      added logs and printed out what happens on the socket layer, P56563098 in this paste you can see that the `[fishhook]` logs are actually those added in D3698728.
      
      Those are the actual bytes written onto the socket, in the paste, the bytes that are written by the AsyncSocket::bioWrite method are
      the ones that actually get written onto the socket. some of the bytes written into the bio comes from bf_buff.c and bss_mem.c which are not eventually attributed to a
      socket message and will be incorrectly counted when getRawBytesWritten/Read invoked on AsyncSSLSocket.cpp
      
      Unfortunately/Fortunately this issue is not symmetrical and does not manifest in the getRawBytesReceived in AsyncSSLSocket, reading the bio for read bytes
      correctly attributes the actual number of bytes written on the socket. moreover, pulling the asyncsocket data for getRawBytesRead doesnt give the full read bytes on
      wire because SSL_connect and SSL_read dont return the number of bytes they read but return the number of bytes without the TLS bytes used.
      
      siyengar seems like a right person to look at this. so adding him here.
      
      Would love to discuss more about this and am open to iterating more on this solution
      
      Reviewed By: knekritz
      
      Differential Revision: D3698744
      
      fbshipit-source-id: 541aa478778b9607f51db194fcbfe28bd23c737f
      4d37864c
    • Meng Zhang's avatar
      Make it build on Ubuntu 16.04 · 0137d629
      Meng Zhang authored
      Summary:
      include linux/membarrier.h if it is available.
      Closes https://github.com/facebook/folly/pull/455
      
      Reviewed By: lukenels
      
      Differential Revision: D3714952
      
      Pulled By: Orvid
      
      fbshipit-source-id: 8c85756af2cb132152b2182816becfea138f0149
      0137d629