1. 26 Nov, 2013 10 commits
    • Peter Griess's avatar
      Handle lack of weak symbols on some platforms · a0fe3c18
      Peter Griess authored
      Summary:
      - It turns out that it's not always desirable to perform runtime
      resolution of weak symbols. For example, on iOS, weak symbols are
      resolved at runtime only if *all* symbol resolution is deferred util
      then, which is undesirable for othe reasons. Detect such platforms at
      configure time and use that information to populate detail/Malloc.h
      with the correct declarations: weak symbols or extern symbols with
      a value of nullptr.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      
      Reviewed By: andrei.alexandrescu@fb.com
      
      FB internal diff: D1002959
      a0fe3c18
    • Peter Griess's avatar
      Handle lack of <bits/c++config.h> and <bits/functexcept.h> · 758e4c77
      Peter Griess authored
      Summary:
      - Clang's libc++ doesn't provide these header files. Detect libc++ via
      the _LIBCPP_VERSION symbol (pulling it in by sourcing some header
      files earlier if necessary) and avoid using these files.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      
      Reviewed By: andrewjcg@fb.com
      
      FB internal diff: D998595
      758e4c77
    • Ben Maurer's avatar
      Avoid copy in folly::toJson · 23123a01
      Ben Maurer authored
      Summary: Adding const avoids a copy constuctor.
      
      Test Plan:
      Unit tests, new benchmark:
      toJson        1.83us  546.15K
      toJson        1.54us  649.98K
      
      Reviewed By: tudorb@fb.com
      
      FB internal diff: D1071781
      23123a01
    • Stephen Chen's avatar
      fix broken clang build: add missing template keyword · bc4b701a
      Stephen Chen authored
      Summary: Broken in D1054291
      
      Test Plan: build adpublisher in clang mode which was one of the two projects that failed to build.
      
      Reviewed By: bmaurer@fb.com
      
      FB internal diff: D1067652
      
      @override-unit-failures
      bc4b701a
    • Stephen Chen's avatar
      Port TimeseriesHistogram from common/stats to folly · 586dd85c
      Stephen Chen authored
      Summary:
      Port TimeseriesHistogram from common/stats to folly. Similarly to
      MultiLevelTimeSeries and Histogram classes we've converted before.
      
      Test Plan:
      Ported the old unittest for TimeseriesHistogram from common/stats to
      folly/test. The same unittest is left in tact and is still passing as well. Ran
      all tests in folly/test and common/stats
      
      Reviewed By: simpkins@fb.com
      
      FB internal diff: D1054291
      586dd85c
    • Dave Watson's avatar
      Add generated files to Makefile.am · 2d980c3d
      Dave Watson authored
      Summary: Missed these on the first pass because they're generated
      
      Test Plan: Built open source folly, links
      
      Reviewed By: pgriess@fb.com
      
      FB internal diff: D1062451
      2d980c3d
    • Tudor Bosman's avatar
      Improve CompressionTest · cda4ae2a
      Tudor Bosman authored
      Summary: Test compressing low-entropy (constant) data as well.
      
      Test Plan: ran it
      
      Reviewed By: tuomas.pelkonen@fb.com
      
      FB internal diff: D1061444
      
      @override-unit-failures
      cda4ae2a
    • Tudor Bosman's avatar
      Fix bad implementation of fnv32 · 11b4d6ba
      Tudor Bosman authored
      Summary: See https://www.facebook.com/groups/fbcode/permalink/601496126553897/
      
      Test Plan: contbuild
      
      Reviewed By: ldbrandy@fb.com
      
      FB internal diff: D1055852
      
      @override-unit-failures
      some hphp_dbg tests postponed for 1.5 days, all other hphp tests
      (including some hphp_dbg ones) are passing
      11b4d6ba
    • Tom Jackson's avatar
      Move byLine to FileGen.h, add explanatory note · 48bc9653
      Tom Jackson authored
      Summary: There's a bit of a gotcha here, let's provide at least a note on this.
      
      Test Plan: Unit tests
      
      Reviewed By: tudorb@fb.com
      
      FB internal diff: D1058244
      48bc9653
    • Daniel Marinescu's avatar
      Added SCOPE_FAIL and SCOPE_SUCCESS macros in non-portable C++. · a57c72d7
      Daniel Marinescu authored
      Summary:
      Added SCOPE_FAIL and SCOPE_SUCCESS macros in non-portable C++. The macros are similar to D's scope(failure) and scope(success).
      Currently the supported platforms are GCC and MSVC. For all others, std::uncaught_exception() is used, which will fail if the macros are used in a destructor called during stack unwinding.
      @override-unit-failures
      
      Test Plan:
      1. Added new unit test to ScopeGuardTest.cpp.
      2. Ran fbconfig -r folly && fbmake dbg
      3. Ran _build/dbg/folly/test/scope_guard_test to make sure my unit test was running and passing.
      
      Reviewed By: andrei.alexandrescu@fb.com
      
      FB internal diff: D1033621
      a57c72d7
  2. 13 Nov, 2013 1 commit
    • Yasser Ganjisaffar's avatar
      Add missing files to Makefile headers · 4962ea0c
      Yasser Ganjisaffar authored
      Summary:
      This two header files are missing from the Makefile which make the
      open source version broken.
      
      Test Plan: code using open source version compiles
      
      Reviewed By: meyering@fb.com
      
      FB internal diff: D1050326
      4962ea0c
  3. 06 Nov, 2013 6 commits
    • Tudor Bosman's avatar
      Add Formatter::writeTo(FILE*) · 8e8b5e75
      Tudor Bosman authored
      Summary: Because I needed it.
      
      Test Plan: test added
      
      Reviewed By: delong.j@fb.com
      
      FB internal diff: D1032179
      8e8b5e75
    • denisspb's avatar
      Update Overview.md · 46600f3e
      denisspb authored
      Summary: just added few words about Subprocess.
      
      Reviewed By: delong.j@fb.com
      
      Test Plan: none
      46600f3e
    • Avani Nandini's avatar
      make move-ctor and destructor noexcept for folly::Optional · 7c083b08
      Avani Nandini authored
      Summary:
      as per summary
      @override-unit-failures
      
      Test Plan: run unit tests
      
      Reviewed By: delong.j@fb.com
      
      FB internal diff: D1031726
      7c083b08
    • Alex Landau's avatar
      Fix passing MoveWrapper into lambdas · e14cd5e1
      Alex Landau authored
      Summary:
      GCC can't compile code that passes a MoveWrapper into a lambda
      in some cases. For example if the capture list has
      [someConstObject, myMoveWrapper], gcc 4.7 fails. This specific case
      works with gcc 4.8, but other cases (e.g. [this, myMoveWrapper]) still
      fail.
      
      This diff is a hack that makes code like that compile. It can be
      removed, along with MoveWrapper itself once we move to C++14 with its
      extended lambda syntax.
      
      Test Plan: fbmake
      
      Reviewed By: hans@fb.com
      
      FB internal diff: D1032585
      e14cd5e1
    • Dave Watson's avatar
      updating folly makefiles · c21eba0d
      Dave Watson authored
      Summary:
      Update Makefile.am with recent files.
      
      Leaves out io/Compression because it uses lz4, of which there are no prebuilt packages for ubuntu (didn't check fedora, but I assume it is the same story there)
      
      Test Plan: on ubuntu 12.10, ./configure, make, make install
      
      Reviewed By: tudorb@fb.com
      
      FB internal diff: D1030008
      c21eba0d
    • Dave Watson's avatar
      move MoveWrapper to folly · 722ef0f3
      Dave Watson authored
      Summary: Add MoveWrapper to folly.
      
      @override-unit-failures
      
      Test Plan: arc unit
      
      Reviewed By: hans@fb.com
      
      FB internal diff: D1030005
      722ef0f3
  4. 25 Oct, 2013 1 commit
    • Sara Golemon's avatar
      Add missing define guard for folly-config.h · 8fcf9c21
      Sara Golemon authored
      Summary:
      Other inclusions of folly-config.h watch for this.
      It must have been missed when this file was added.
      
      Test Plan: Fixes Mac OSX build.
      
      Reviewed By: seanc@fb.com
      
      FB internal diff: D1028354
      8fcf9c21
  5. 24 Oct, 2013 20 commits
    • Sara Golemon's avatar
      Add missing include · 78d1c04a
      Sara Golemon authored
      Summary:
      MemoryMapping.cpp uses DEFINE_int64() from gflags,
      but doesn't include it anywhere.
      
      @override-unit-failures
      
      Test Plan: OSS build failure goes away
      
      Reviewed By: seanc@fb.com
      
      FB internal diff: D1026364
      78d1c04a
    • Andrey Goder's avatar
      fix typo in comment · 83f654ef
      Andrey Goder authored
      Summary: Pretty sure it was meant to be this way...
      
      @override-unit-failures
      
      Test Plan: n/a
      
      Reviewed By: tudorb@fb.com
      
      FB internal diff: D1020789
      83f654ef
    • Philip Pronin's avatar
      exponential capacity growth for io::TypedIOBuf · 94fce358
      Philip Pronin authored
      Summary:
      Amortized cost of `TypedIOBuf::push()` is `O(N)` at this moment.
      Unless we're using jemalloc where we can rely on `realloc()`.  In this
      diff we switch to exponential growth otherwise.
      
      Test Plan:
      built unicorn/test with ASan (and thus without jemalloc), ran
      end-to-end tests and verified we no longer spend minutes to build di4
      
      @override-unit-failures
      
      Reviewed By: tudorb@fb.com
      
      FB internal diff: D1015233
      94fce358
    • Philip Pronin's avatar
      avoid using ifunc + ASan · 681e4677
      Philip Pronin authored
      Summary:
      Code that is using ifunc dies with SIGSEGV on startup when used
      with ASan.
      
      Here is gdb output: {P2882504}
      
      Seems like `ifunc` dispatch is happening before ASan is initialized,
      but ASan instrumentation logic being called from there.
      
      Test Plan:
      built affected unicorn binaries with ASan, ran them, verified
      there is no more SIGSEGV
      
      Reviewed By: meyering@fb.com
      
      FB internal diff: D1013420
      681e4677
    • Rajat Goel's avatar
      Issue with find and npos · b3cd8a1b
      Rajat Goel authored
      Summary:
      I dont know whats the expected behavior but for std::string it seems
      to work.
      
      @override-unit-failures
      
      Test Plan:
      unit-tests
      
      [ RUN      ] FBString.findWithNpos
      folly/test/FBStringTest.cpp:1147: Failure
      Value of: fbstr.find(":", fbstring::npos)
      Actual: 9
      Expected: fbstring::npos
      Which is: 18446744073709551615
      
      Reviewed By: andrei.alexandrescu@fb.com
      
      FB internal diff: D1012870
      b3cd8a1b
    • Nicholas Ormrod's avatar
      Change FBString's #define throw · b604632b
      Nicholas Ormrod authored
      Summary:
      Instead of defining throw to nothing, define it to something
      which creates a grepable error message (re @tudorb in D1005889).
      
      @override-unit-failures
      
      Test Plan:
      fbconfig -r folly
      fbmake dbg && fbmake runtests && fbmake opt && fbmake runtests_opt
      
      All tests passing.
      
      Added throw to a few places in FBString; noticed that error messages
      were produced, and that they contained the defined text. Those changes
      not committed.
      
      Reviewed By: tudorb@fb.com
      
      FB internal diff: D1011963
      b604632b
    • Philip Pronin's avatar
      fix a few bugs in FBString · 8c13c0b9
      Philip Pronin authored
      Summary:
      * `push_back()` fails for medium strings of zero capacity if not linked
      with jemalloc (see added test),
      * we incorrectly initiliaze capacity when acquire mallocated string
      (forgot about null terminator).
      
      Test Plan: fbconfig --allocator=malloc folly/test:fbstring_test_using_jemalloc && fbmake runtests_opt
      
      @override-unit-failures
      
      Reviewed By: tudorb@fb.com
      
      FB internal diff: D1012196
      8c13c0b9
    • Jim Meyering's avatar
      folly, tao: don't impose C constraints on folly's Portability.h · 796bfa80
      Jim Meyering authored
      Summary:
      * folly/Portability.h: Move the definitions that Tao uses
      into a new file, and include that new file here.
      * folly/AddressSanitizer.h: New file.
      * tao/server/config.h: Include that small new file, rather
      than all of folly's Portability.h
      
      Test Plan:
      fbconfig -r tao/server &&
      tao/server/tests/run_unit_tests.sh -d --save-log=log
      For folly, watch the arc-run tests.
      
      Reviewed By: pgriess@fb.com
      
      FB internal diff: D1011800
      
      @override-unit-failures
      796bfa80
    • Sathya Gunasekar's avatar
      Include cpp only when needed · 3851f0ea
      Sathya Gunasekar authored
      Summary:
      D1008921 broke compilation for tao which uses folly/Portability.h
      This diff guards the change for only c++ code. Not sure if this breaks the
      definition of portability.
      
      Test Plan: Compile tao, fbconfig -r folly and fbmake runtests
      
      Reviewed By: simpkins@fb.com
      
      FB internal diff: D1010967
      
      @override-unit-failures
      3851f0ea
    • Peter Griess's avatar
      Remove trailing comma in configure.ac. · 040c3387
      Peter Griess authored
      Summary:
      - We were inadvertantly emitting a superfluous comma when generating the
      configure script, causing it warn on execution. This was caused by
      separating two AC_DEFINE() invocations w/ a comma.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      
      Reviewed By: meyering@fb.com
      
      FB internal diff: D1008924
      040c3387
    • Peter Griess's avatar
      Remove check that depends on malloc implementation. · e6c32d1b
      Peter Griess authored
      Summary:
      - The EXPECT_EQ(vec.capacity(), vec2.capacity()) check is implicitly
      testing how the platform's malloc() and malloc_usable_size()
      implementations interact. We know that small_vector will attempt to
      allocate storage for 3 elements via malloc(), but the small_vector
      implementation then uses malloc_usable_size() to determine capacity,
      which can return more than the size requested by malloc(). As a
      result, capacity may grow more than expected depending on how the
      malloc implementation works.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      
      Reviewed By: alandau@fb.com
      
      FB internal diff: D1008922
      e6c32d1b
    • Peter Griess's avatar
      Detect and use std::is_trivially_copyable<T> where possible. · baab3743
      Peter Griess authored
      Summary:
      - Sadly, boost::has_trivial_copy<T> is not a suitable replacement for
      std::is_trivially_copyable<T> on libc++. Fortunately, the latter is
      actually supported (and works), so use it directly.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      
      Reviewed By: delong.j@fb.com
      
      FB internal diff: D1008921
      baab3743
    • Peter Griess's avatar
      Only run FBString.testConstructionFromLiteralZero under GNU libstdc++ · 60f2c87d
      Peter Griess authored
      Summary:
      - This test verifies the behavior of std::string(0), which the GNU
      library expects to throw an std::logic_error. Other libraries may have
      other behaviors; libc++ segfaults.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      
      Reviewed By: simpkins@fb.com
      
      FB internal diff: D1003125
      60f2c87d
    • Peter Griess's avatar
      Set -std=XXX flags earlier; use in AC_COMPILE_IFELSE() · 9d456e4f
      Peter Griess authored
      Summary:
      - We had a bug where AC_COMPILE_IFELSE() invocations weren't using the
      same -std=XXX flags that we're using in our actual build. This
      happened because we made these checks before figuring out which
      flag to use.
      - Stop setting -std=XXX flags in CPPFLAGS. It's only useful for
      CFLAGS/CXXFLAGS.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      
      Reviewed By: meyering@fb.com
      
      FB internal diff: D1003972
      9d456e4f
    • Peter Griess's avatar
      Detect C++ implementations that support constexpr strlen() · e5b563e9
      Peter Griess authored
      Summary:
      - Only declare the Range constructor as a constexpr if strlen() is also
      a constexpr. Otherwise, we'll get compilation errors.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      
      Reviewed By: soren@fb.com
      
      FB internal diff: D1003124
      e5b563e9
    • Peter Griess's avatar
      Check for std::this_thread::sleep_for. · 31005a98
      Peter Griess authored
      Summary:
      - Some installations of libstdc++ don't have this defined. This happens
      if they were built without --enable-libstdcxx-time. Detect this and
      avoid tests that rely on this behavior.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      
      Reviewed By: meyering@fb.com
      
      FB internal diff: D1002963
      31005a98
    • Peter Griess's avatar
      Detect libc++ in configure.ac. · 77cc480d
      Peter Griess authored
      Summary:
      - Explicitly detect use of libc++ in configure.ac and reflect this in
      folly-config.h. Do this rather than looking for to pop up organically
      _LIBCPP_VERSION since this only exists if we've included some libc++
      header files prior to refernce. This isn't always the case, e.g. in
      Portability.h.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      
      Reviewed By: simpkins@fb.com
      
      FB internal diff: D1002958
      77cc480d
    • Peter Griess's avatar
      Use Mach built-ins in lieu of clock_gettime(3) and friends. · 1342be12
      Peter Griess authored
      Summary:
      - Mach doesn't support clock_getres(3) or clock_gettime(3). Provide our
      own implementations by wrapping mach_timebase_info() and
      mach_absolute_time().
      - Detect availability of of -lrt at configure time and don't link with
      it if it's not available. On Linux, this is what provides
      clock_gettime(3) and friends.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      
      Reviewed By: meyering@fb.com
      
      FB internal diff: D999131
      1342be12
    • Nicholas Ormrod's avatar
      Migrating folly to gcc-4.7.1 · d7562b8c
      Nicholas Ormrod authored
      Summary:
      folly/PLATFORM is the last fbcode platform on gcc-4.6.2.
      
      Before pushing, I ran arc unit from my devserver (see Test Plan).
      Phabricator's test run has a lot of aborted test cases, which are
      indicative of a failing test framework. Arc unit had been
      intermittently broken when running my own tests. Overriding
      Phabricator's unit test failures:
      @override-unit-failures
      
      Test Plan:
      (1) fbconfig -r folly/ -- build and runtsts in dbg and opt.
      
      Everything is passing.
      
      (2) arc unit, look at each failed result
      
      Some builds/tests are failing. Most seem unrelated. Of the rest, one is
      also failing on master, and the others did not fail during a second run.
      
      Reviewed By: andrei.alexandrescu@fb.com
      
      FB internal diff: D1005889
      d7562b8c
    • Philip Pronin's avatar
      make IOBuf::coalesce return ByteRange · de0fe30e
      Philip Pronin authored
      Test Plan: fbconfig -r folly/io && fbmake opt -j32 && fbmake runtests_opt
      
      @override-unit-failures
      
      Reviewed By: soren@fb.com
      
      FB internal diff: D1005735
      de0fe30e
  6. 15 Oct, 2013 2 commits
    • Peter Griess's avatar
      Cast lambda to function pointer for boost::split(). · 44365277
      Peter Griess authored
      Summary:
      - For some reason, Boost's internals aren't considering this lambda a
      type that's castable. Cast it to a function pointer before using it.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      - _bin/folly/test/string_test --benchmark
      
      Reviewed By: alandau@fb.com
      
      FB internal diff: D998594
      44365277
    • Peter Griess's avatar
      Be more careful when using SSE intrinsics. · 69b46104
      Peter Griess authored
      Summary:
      - Check FOLLY_HAVE_EMMINTRIN_H before #including it in Range.cpp.
      - The version of Clang that Mac OS X uses for Xcode is based on GCC 4.2.
      It turns out that this does not have a full compliment of SSE2
      builtins (e.g. __builtin_ia32_loaddqu is undefined, but
      __builtin_ia32_storedqu is). Work around this omission by not
      compiling the specialized code on this platform.
      
      @override-unit-failures
      Ignore unit test failures as two tests are just sitting in the postponed
      state forever. I investigated all the other unit test failures and they
      just look like flakey tests.
      
      Test Plan:
      - fbconfig -r folly && fbmake runtests
      - ./configure && make check on Ubuntu/FC/Mac
      
      Reviewed By: delong.j@fb.com
      
      FB internal diff: D999130
      69b46104