1. 10 Dec, 2016 2 commits
    • Christopher Dykes's avatar
      Enable -Wunreachable-code-break · 4168732c
      Christopher Dykes authored
      Summary: Because the `break;` can be dead, and sometimes is indicitive of a different type of error.
      
      Reviewed By: meyering
      
      Differential Revision: D4310056
      
      fbshipit-source-id: ad215eb9b2e5bb4d5c703582203efce893b26a76
      4168732c
    • Kyle Nekritz's avatar
      Log supported versions extension in AsyncSSLSocket. · 38442e01
      Kyle Nekritz authored
      Summary: To monitor client support of TLS 1.3.
      
      Reviewed By: ngoyal
      
      Differential Revision: D4308473
      
      fbshipit-source-id: cb6fb444c8b7ced39e6655a0f63b18523c2fb9c5
      38442e01
  2. 09 Dec, 2016 6 commits
    • Nathan Bronson's avatar
      folly/io/async/tests: always detach event base in tests, fixes UBSAN tests · c80831a5
      Nathan Bronson authored
      Summary:
      In AsyncSSLSocket tests the shared_ptr structure means that the
      AsyncSSLSocket-s outlive the stack-allocated EventBase on which they were
      created.  Previously there were scattered calls to detachEventBase on the
      last interesting callback, but several calls were missing.  This diff
      switches to a model where the SSLServerAcceptCallbackBase is responsible
      for detaching the sockets.
      
      This diff also fixes a low-firing race between shutdown
      of the TestSSLAsyncCacheServer Main thread and a call to
      EmptyReadCallback::readEOF.  Most uses of EmptyReadCallback don't attach
      the TCP socket, so they can't actually tolerate a call to readError
      or readEOF.
      
      These use-after-destruction problems were discovered by UBSAN.
      
      Reviewed By: djwatson
      
      Differential Revision: D4301416
      
      fbshipit-source-id: 127fb5e506d0694c5ca81d7a38c704d69f4ab3eb
      c80831a5
    • Christopher Dykes's avatar
      Enable -Wextra-semi · 10847386
      Christopher Dykes authored
      Summary:
      Because the extra semicolons are useless and all typos...
      GCC doesn't have this warning. Neither does MSVC, but that won't stop me.
      
      Reviewed By: igorsugak
      
      Differential Revision: D4304218
      
      fbshipit-source-id: a06586edc6b9bafd5dd074e9fd4e0ed152181abc
      10847386
    • Christopher Dykes's avatar
      Don't shadow locals, parameters or fields · d5c1c794
      Christopher Dykes authored
      Summary:
      This accounts for the places that were triggering warnings 4456, 4457, and 4458, which are all related to shadowing names, be they locals, parameters, or even types.
      This doesn't deal with 4459, which is specifically for shadowing global variables, because folly/gen defines globals by the name of `count`, `min`, `max` and a few other similar names.
      
      Reviewed By: meyering
      
      Differential Revision: D4296781
      
      fbshipit-source-id: a2e625095e2c65a53a9226b000aaf0ca95a3a393
      d5c1c794
    • David Goldblatt's avatar
      Fix SimpleBarrier · 43d3a315
      David Goldblatt authored
      Summary:
      Do the barrier completion test in a loop. (std::condition_variable has pthreads-style spurious wakeups).
      
      (Sorry for missing this in review).
      
      Reviewed By: djwatson
      
      Differential Revision: D4302035
      
      fbshipit-source-id: 3322d6a0ffba8c47c46bafb1d88034e1a0a9c652
      43d3a315
    • Dave Watson's avatar
      update small locks benchmark · efc07505
      Dave Watson authored
      Summary: Add fairness benchmark, contended benchmark
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D3706680
      
      fbshipit-source-id: 01814fcd6b0cc3dd12815a2b2c248abc6a3771ec
      efc07505
    • Qinfan Wu's avatar
      Fix sorted_vector_set::erase · eab8d3c3
      Qinfan Wu authored
      Summary: It deletes things even when input isn't in the container.
      
      Reviewed By: luciang
      
      Differential Revision: D4298340
      
      fbshipit-source-id: 3e8fc04c2c21eb231dcaf82239ac5f6d25e49e2c
      eab8d3c3
  3. 07 Dec, 2016 9 commits
    • David Lam's avatar
      Fix Synchronized.md documentation to use correct condition_variable::wait call · 65fc07b5
      David Lam authored
      Summary:
      `condition_variable::wait_for` takes as second param `std::chrono::duration`
      and not a predicate; what we want is `condition_variable::wait`.
      
      Reviewed By: simpkins
      
      Differential Revision: D4295305
      
      fbshipit-source-id: 05f735fe6e7ecb9d8f42cb38a2985b9ce9dad984
      65fc07b5
    • Christopher Dykes's avatar
      Fix some implicit truncations in the interaction with OpenSSL APIs · 68112fa0
      Christopher Dykes authored
      Summary: MSVC has the ability to warn about implicit truncations and places where implicit sign coercions are occuring, so do some cleanup to make it possible to compile with the warnings enabled.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4288028
      
      fbshipit-source-id: f8330c62b2dcb76f696dfc47888f0e3e1eefc21a
      68112fa0
    • Yedidya Feldblum's avatar
      Cut some includes from Executor.h · c9fc2e32
      Yedidya Feldblum authored
      Summary: [Folly] Cut some includes from `Executor.h`.
      
      Reviewed By: mzlee
      
      Differential Revision: D4256618
      
      fbshipit-source-id: 1728f48b3c0ec4e0c4c84c44bd8afb583d438129
      c9fc2e32
    • Wez Furlong's avatar
      USE_JEMALLOC in the OSS build if we have jemalloc · e44d8a62
      Wez Furlong authored
      Summary:
      Nothing defines USE_JEMALLOC in the OSS build today and that causes
      some portability problems.
      
      Specifically, the homebrew recipe will make libjemalloc available and our
      configure script will detect it and add it to the library flags.
      
      Our subsequent check for `malloc_usable_size` then finds this function in
      libjemalloc.
      
      When later attempting to build wangle against the homebrew folly we get
      compilation failures because the prototype for `malloc_usable_size` is only
      available in the jemalloc headers and nothing in the saved configuration for
      folly is set up for this to be pulled in as it it guarded by `USE_JEMALLOC`.
      
      This attempts to resolve the situation by forcing on `USE_JEMALLOC` when
      we detect the library in configure.
      
      This is made a little more complicated because we cannot set `USE_JEMALLOC`
      in the OSS build; it gets rewritten to have a `FOLLY_` prefix.  Since we
      have code outside of folly that requires that this symbol be `USE_JEMALLOC`,
      I've changed the conditional to check for both flavors of the symbol, with
      and without the prefix.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4289176
      
      fbshipit-source-id: 756bc815c3ef1fac454e603feb72155d98c5aadd
      e44d8a62
    • Eric Niebler's avatar
      add folly::FixedString, a constexpr-usable string with a fixed-size internal buffer · 77d5e547
      Eric Niebler authored
      Summary: Inspired by http://wg21.link/p0259, folly::BasicFixedString is a std::string replacement that is usable in constexpr contexts. It uses an internal fixed-size buffer to store up to N characters, where N is a template parameter.
      
      Reviewed By: luciang
      
      Differential Revision: D4249529
      
      fbshipit-source-id: 10f12ea2510a8d21ec60a07a8f15ecc3e35c5431
      77d5e547
    • Christopher Dykes's avatar
      Rename stdin, etc. in Subprocess to work with MSVC · 2f6eb182
      Christopher Dykes authored
      Summary:
      `stdin`, `stdout` and `stderr` are macros that expand to function calls with the MSVC CRT implementation. This is also the case for musl-libc. This means that Subprocess simply cannot be compiled on those platforms without changing the API.
      To solve that, we change the API and deprecate the old API.
      
      For more fun, `stdin`, `stdout` and `stderr` are also macros in glibc, they just expand to other identifiers rather than a function call.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4229544
      
      fbshipit-source-id: 97f1a3b228b83cfdcaffee56d729063ea235e608
      2f6eb182
    • Nathan Bronson's avatar
      fix FutureTest/RequestContext · 65d64c0d
      Nathan Bronson authored
      Summary: Fix use-after-destroy of NewThreadExecutor.  Detected by opt-ubsan tests.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4291900
      
      fbshipit-source-id: 206f1d7b80fa04e1570e4b7a20e50b9a8ceb7bcb
      65d64c0d
    • Nathan Bronson's avatar
      increase writeLen for tests that want to trigger buffering · a4e480b2
      Nathan Bronson authored
      Summary:
      Freshly opened TCP sockets can have a send buffer size bigger
      than wmem_default, because connection parameters are cached in the
      route cache.  Some of the async socket tests assumed that writing 8M of
      data was enough to guarantee blocking behavior, but since wmem_max is
      20M on our systems the resulting tests are flaky.
      
      Reviewed By: marcinpe
      
      Differential Revision: D4292201
      
      fbshipit-source-id: ba5d606d080330e455eee2b17bcae6cf546bf981
      a4e480b2
    • Dan Schatzberg's avatar
      Add EvictingCacheMap MoveConstructor · 9b816e89
      Dan Schatzberg authored
      Summary:
      Add the default move constructor and move operator
      to EvictingCacheMap so it can be moved.
      
      Reviewed By: markisaa, luciang
      
      Differential Revision: D4287472
      
      fbshipit-source-id: 130e9d5467d6da14ba95a9e769cf8e8d541a704c
      9b816e89
  4. 06 Dec, 2016 5 commits
    • Andrii Grynenko's avatar
      Increase fiber stack size if UBSAN is enabled · 99994d0a
      Andrii Grynenko authored
      Summary: UBSAN instrumentation results in more stack being used. Applying the same logic we already have for ASAN there.
      
      Reviewed By: igorsugak
      
      Differential Revision: D4287455
      
      fbshipit-source-id: 1a224cb5a3654c23b15fa298bf80476234a1418c
      99994d0a
    • Michael Lee's avatar
      Remove unecessary iostream include · bc779ac3
      Michael Lee authored
      Summary: MacAddress only needs to include ostream and the test header does not need iostream.
      
      Differential Revision: D4286405
      
      fbshipit-source-id: e64fdd4e8428c62279ed7c185188f3dfc14096d3
      bc779ac3
    • Michael Lee's avatar
      More iostream removal. · abf585dc
      Michael Lee authored
      Summary:
      We do not need it and it adds a static initialization
      
      This is the last extra one in liger. The other places actually need iostream to print things
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4286095
      
      fbshipit-source-id: 44a827e48e9fb9106626e784592eb194dff83bf6
      abf585dc
    • Christopher Dykes's avatar
      Make bm_min_iters a 32-bit flag · 75d32465
      Christopher Dykes authored
      Summary:
      The benchmark API only supports `unsigned int` as the iteration number, so this being 64-bit means it has to be truncated for no reason.
      This change gets us closer to being able to enable MSVC's implicit truncation warnings.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4281264
      
      fbshipit-source-id: 27397e3f23bace20f3cc457665ea6f21bf994da5
      75d32465
    • Misha Shneerson's avatar
      fix gbd debugging script · cad41641
      Misha Shneerson authored
      Summary:
      I was getting an error when running commands in
      https://our.intern.facebook.com/intern/dex/fibers/gdb/
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D4283229
      
      fbshipit-source-id: fe45847d0ec6cadfbce6fe9818066cce3e275a46
      cad41641
  5. 05 Dec, 2016 2 commits
  6. 04 Dec, 2016 1 commit
    • Amir Shalem's avatar
      Fix potential double close() on exception · fae84c77
      Amir Shalem authored
      Summary:
      Fix potential double close() on exception when SO_REUSEPORT fails.
      The fd will be closed twice, once by close() and second by the scope guard above.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4272300
      
      fbshipit-source-id: a163be822d7522cadb9dc3c3eddca10df453de14
      fae84c77
  7. 03 Dec, 2016 1 commit
    • Christopher Dykes's avatar
      Get ConcurrentSkipList functional · 42c52025
      Christopher Dykes authored
      Summary:
      MSVC was getting thoroughly confused while trying to eval the constexpr function, so switch it to a template instead.
      MSVC was also failing to wrap it's head around what a NodeRecycler is, so delay its resolution via typename.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D3478755
      
      fbshipit-source-id: f687f4538fb12ef8eee525557f4cc988a09e714d
      42c52025
  8. 02 Dec, 2016 2 commits
    • Christopher Dykes's avatar
      Begin making folly compile cleanly with a few of MSVC's sign mismatch warnings enabled · 047e9e39
      Christopher Dykes authored
      Summary:
      This makes the changes required to allow folly to compile cleanly with the sign/unsigned mismatch warnings 4388 and 4389, as well as with warnings 4804 and 4805, which are about comparisons between scalars and bool.
      Most of the changes in this are to `DCHECK_*` calls which are translated to a templated call which does the comparison internally based on the inferred type of the argument, which for a literal `0` is `int`, causing the warnings to get generated when the comparison is done.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4253427
      
      fbshipit-source-id: cd17973a78e948a62c886a2959f9abf40a69f9f5
      047e9e39
    • Scott Michelson's avatar
      support getting timer from eventbase · 853adb4f
      Scott Michelson authored
      Summary: This brings the EventBase functionality of getting a timer for the eventbase into the virtual interface
      
      Differential Revision: D4264135
      
      fbshipit-source-id: e5526610eca808e1d7b549a7cd6cd7b2c65d3ce1
      853adb4f
  9. 01 Dec, 2016 5 commits
    • Adam Simpkins's avatar
      add a new writeFileAtomic() function · 3e107c2e
      Adam Simpkins authored
      Summary:
      Add a utility function to more safely set a file's contents by writing to a
      temporary file first, then renaming the temporary file into place.  On Linux
      systems where renames are atomic, this ensures that the operation either
      succeeds or that the old file state is left unchanged on failure.
      
      Note that unlike most of the other APIs in FileUtil.h, I intentionally made
      writeFileAtomic() throw an exception on failure.  This is implemented using a
      lower-level writeFileAtomicNoThrow() version.  Callers who care about the
      exception overhead can use the lower level version instead.  (Exception
      overhead should be relatively low compared to the file I/O operations, though,
      so I suspect most users will prefer the throwing APIs.)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4253964
      
      fbshipit-source-id: 5301e2791b82c6f90b63bb509b0411841c266705
      3e107c2e
    • Yedidya Feldblum's avatar
      Future<typename>::getTryVia · c1bd7145
      Yedidya Feldblum authored
      Summary:
      [Folly] `Future<typename>::getTryVia`.
      
      We have `waitVia` and `getVia` and `getTry`, but `getTryVia` was missing.
      
      Reviewed By: fugalh
      
      Differential Revision: D4254972
      
      fbshipit-source-id: 403e1a3496ad5dfc93c4c55ab75a83bcc89e6c64
      c1bd7145
    • Subodh Iyengar's avatar
      Fix assertion in unit test · 7c8f000f
      Subodh Iyengar authored
      Summary:
      Fix test for AsyncSSLSocket. When a timeout
      occurs during a handshake it's possible that
      invokeConnectError is called with sslState_ ==
      CONNECTING. This just removes the assertion in
      this case. This doesnt affect prod code, only
      tests
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4252677
      
      fbshipit-source-id: 4db3a94ae28aa140546554c087bedcee7f06d201
      7c8f000f
    • Andrii Grynenko's avatar
      Use singleton EventBasePool in ServiceRouter · 930da054
      Andrii Grynenko authored
      Summary:
      Switching ServiceRouter code to use VirtualEventBase instead of EventBase allows us to have same thread-pool shared between multiple ServiceRouter instances.
      
      In future this allows us to replace EventBasePoolImpl with some generic thread-pool implementation (e.g. IOThreadPoolExecutor). It also makes it trivial to have ServiceRouter run on a any existing thread-pool if necessary.
      
      Reviewed By: smichelson
      
      Differential Revision: D3935283
      
      fbshipit-source-id: 3275bbace15a0df8b06d12c970ccc098a631658d
      930da054
    • Andrii Grynenko's avatar
      Use SingletonThreadLocal in folly::Random · 895c8a62
      Andrii Grynenko authored
      Summary: folly::SingletonThreadLocal should be used for all thread-local singletons to avoid SDOF.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4253009
      
      fbshipit-source-id: 5b4ca57a7a77b7b54c94630a2a29d13b84a3af27
      895c8a62
  10. 30 Nov, 2016 3 commits
    • Christopher Dykes's avatar
      Start fixing implicit truncations · 4dd1dd68
      Christopher Dykes authored
      Summary:
      Truncations should be explicit, but for some reason, MSVC seems to be the only compiler that will warn you when you implicitly truncate integer or float values.
      This allows Folly to be compiled with warnings 4018, 4242, 4244 and 4305 enabled.
      Technically 4018 is a sign mismatch warning, but there was only one place it was being triggered so I included it anyways. The other 3 are warnings for implicit truncation.
      
      There is one other implicit truncation warning that currently triggers in Folly, 4267, but there are a lot more places where that triggers so I'll do that in a separate diff.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4249471
      
      fbshipit-source-id: e18a93d85856c998576934a6229c9edd1638a54e
      4dd1dd68
    • Teng Qin's avatar
      Add optional Tracepoint for RequestContext switch · ea209427
      Teng Qin authored
      Summary: Using newly added `StaticTracepoint.h`, add a Tracepoint for `RequestContext` switch that could be enabled by compiler flag.
      
      Reviewed By: drarmstr
      
      Differential Revision: D4238658
      
      fbshipit-source-id: 043a035ba8251b48d7b29d63a2219ad2edda164f
      ea209427
    • Eric Niebler's avatar
      Add constexpr to the simple folly::Range accessors (begin, end, data, empty, etc) · f972b1ee
      Eric Niebler authored
      Summary: More constexpr is better!
      
      Reviewed By: yfeldblum, luciang, ot
      
      Differential Revision: D4244996
      
      fbshipit-source-id: 30a9b726c115a92bb18538d7f18e50eccb0a1ef6
      f972b1ee
  11. 29 Nov, 2016 4 commits
    • Tiho Tarnavski's avatar
      Fix incorrect bytesWritten computation in AsyncSocket · 59a501cf
      Tiho Tarnavski authored
      Summary: If a write request is buffered after a partial write, then bytes written is not updated after subsequent write operations (`performWrite`) for the buffered write request (`BytesWriteRequest`). This results in a wrong value for totalBytesWritten_, which is reported in the error callback in case the write request fails.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4205743
      
      fbshipit-source-id: f77ca55ccfdceda1008c45e72ec093b00bf250e4
      59a501cf
    • 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