1. 22 Jul, 2015 4 commits
    • Nathan Bronson's avatar
      fix racy assert in SharedMutex · 7334598f
      Nathan Bronson authored
      Summary: SharedMutex purposely allows the inline reader count to underflow in some
      situations while preserving proper locking behavior (the inline reader
      count is only trusted if all deferred locks have been applied), but there
      was an additional way that this could occur that wasn't documented or
      allowed by the asserts.  The effect was a false positive assert in rare
      conditions or the possibility of losing track of a deferred lock slot.
      This diff fixes both the over-aggressive assert and the potential loss
      of the shared slot.  If the assert didn't fire for you then this diff
      won't change the correctness of your program.
      
      Reviewed By: @yfeldblum
      
      Differential Revision: D2269018
      7334598f
    • Tudor Bosman's avatar
      Add executable_path() and convert SubprocessTest to use it · cd464069
      Tudor Bosman authored
      Summary: Because I didn't want to write it again.
      
      Reviewed By: @yfeldblum
      
      Differential Revision: D2217246
      cd464069
    • Ondrej Lehecka's avatar
      making thrift and folly header files compile clean with -Wunused-parameter · 89282758
      Ondrej Lehecka authored
      Summary: fixing compiler errors when compiling with Wunused-parameter
      
      Reviewed By: @yfeldblum
      
      Differential Revision: D2267014
      89282758
    • Hannes Roth's avatar
      (Wangle) window, fix test · 4ae8db54
      Hannes Roth authored
      Summary: Thanks @​peijinz for finding this.
      
      Reviewed By: @​peijinz
      
      Differential Revision: D2268532
      4ae8db54
  2. 21 Jul, 2015 7 commits
  3. 20 Jul, 2015 11 commits
    • Sara Golemon's avatar
      Bump version to 51:0 · 8cf17bb5
      Sara Golemon authored
      8cf17bb5
    • Brian Watling's avatar
      Allow access to a FiberManager's currently running fiber · 7aff2d80
      Brian Watling authored
      Summary: Allow access to a FiberManager's currently running fiber
      
      Reviewed By: @alikhtarov, @andriigrynenko
      
      Differential Revision: D2257201
      7aff2d80
    • Nick Terrell's avatar
      Overload Optional::value() on object reference type. · 1470961d
      Nick Terrell authored
      Summary: `folly::Optional` returns the stored value by reference when the object
      is an rvalue.  This causes three issues:
      
        * If the user calls `value()` on an rvalue `Optional`, and assigns the result
          to a new variable, the copy constructor gets called, instead of the move
          constructor.  This causes the added test `value_move` to not compile.
        * If the user calls `value()` on an rvalue `Optional`, and assigns the result
          to a const lvalue reference, they might expect the lifetime to be extended
          when it isn't. See the added test `value_life_extention`.
        * Assigning the results of `value()` on an rvalue `Optional` to a mutable
          lvalue reference compiled in the old code, when it shouldn't, because that
          is always a dangling reference as far as I can tell.
      
      I'm not sure how strict `folly` is with compatibility, but I believe the
      breakage would be minimal, and any code that gets broken probably deserves it.
      
      I'm not exactly sure who I should add as a reviewer, so hopefully herald has got
      my back.
      
      Reviewed By: @yfeldblum
      
      Differential Revision: D2249548
      1470961d
    • Steve O'Brien's avatar
      folly Singleton: clear some state if creator function fails · ad7e7f72
      Steve O'Brien authored
      Summary: The creator thread ID is saved to indicate the singleton is already being built (to help detect dependency cycles).  However if the creation function throws an error, that thread ID persists, and then if the same thread tries again to build the singleton it will be falsely detected as a dependency cycle.  This clears that state in the case of failure.
      
      Reviewed By: @chipturner
      
      Differential Revision: D2256441
      ad7e7f72
    • Hannes Roth's avatar
      Revert: (Wangle) within should raise TimedOut() · 8a876701
      Hannes Roth authored
      Summary: This reverts commit 956351018a495af89575526536af7e7c0bb285aa.
      
      Reviewed By: @​labrams
      
      Differential Revision: D2258219
      8a876701
    • Steve O'Brien's avatar
      folly HHWheelTimer: fix loop variable · 489a7f09
      Steve O'Brien authored
      Summary: In nested loop, loop condition is incorrect.  Fixed var (should be `ii` not `i`)
      
      Reviewed By: @pgriess
      
      Differential Revision: D2255702
      489a7f09
    • Tom Jackson's avatar
      Making Optional throw exceptions instead of assert · 22e8caf3
      Tom Jackson authored
      Summary: I'm upgrading assertions to throws, since these are fatal in all circumstances. If something is explicitly `Optional`, it makes sense to fail loudly if it is misused in this manner.
      
      Reviewed By: @yfeldblum
      
      Differential Revision: D2247612
      22e8caf3
    • James Sedgwick's avatar
      add SocketPair.h/.cpp to Makefile · 59bdbbcc
      James Sedgwick authored
      Summary: to unbreak OSS wangle tests build
      
      Reviewed By: @bugok
      
      Differential Revision: D2240264
      59bdbbcc
    • Tudor Bosman's avatar
      folly::Future-istic barrier · 83312f92
      Tudor Bosman authored
      Summary: What it says on the tin.
      
      Reviewed By: @fugalh
      
      Differential Revision: D2230390
      83312f92
    • Pavlo Kushnir's avatar
      Add an option to disable guard pages for fiber stacks · 84f796c9
      Pavlo Kushnir authored
      Summary: guard pages may make debugging more painful. For example, in some cases they increased "perf" initialization time.
      
      Reviewed By: @alikhtarov
      
      Differential Revision: D2247188
      84f796c9
    • Hannes Roth's avatar
      (Wangle) within should raise TimedOut() · 65fd92b6
      Hannes Roth authored
      Summary: I figured it out. This works. The two extra futures are a small overhead
      (just two pointers). The `Core`s are allocated anyway, so this is pretty
      much optimal.
      
      A timeout now raises on the current Future, and a fulfilled promise
      cancels the timeout Future.
      
      Reviewed By: @yfeldblum
      
      Differential Revision: D2232463
      65fd92b6
  4. 15 Jul, 2015 8 commits
    • Sara Golemon's avatar
      Only try to use F_SETPIPE_SZ if it's available · c23480d0
      Sara Golemon authored
      Summary: As the comment says, we can ignore errors in setting the size.
      So it stands to reason we can ignore setting the size as well.
      
      Reviewed By: @yfeldblum
      
      Differential Revision: D2242882
      c23480d0
    • Sophia Wang's avatar
      Make DestructorGuard inherit from a base · f46045c9
      Sophia Wang authored
      Summary: There are more use cases that the Destruction/Guard pattern can be
      used than current DelayedDestruction provides. This diff makes the pattern more
      general (remove self destruct) and lets DelayedDestruction derive from that.
      The functionalities of DelayedDestruction is kept unchanged.
      
      I leave destroy(), Destructor class, and destroyPending_ in DelayedDestruction
      since they are not required by our CallbackGuard in proxygen.
      
      I add a shouldDestruct() function to allow customized conditions on when to
      call destructor.
      
      I haven't made destroyNow() a std::function since I only need it to be set at
      instatiation time. If there is any other use case that needs destroyNow() to be
      a std::function, I can do that as well.
      
      Reviewed By: @afrind
      
      Differential Revision: D2202575
      f46045c9
    • Joe Richey's avatar
      Actually denote when we have infinite generators · a1107271
      Joe Richey authored
      Summary: Before we didn't do anything at all with the ::infinite value for our
      generators, now all the sources operators and sinks are properly notated. The
      one signifcant change regarding what is allowed concerns 'cycle' which now (when
      called with no arguments) always produces an infinite generator. This is fine
      for all but the weirdest of generators fed into cycle.
      
      Reviewed By: @ddrcoder
      
      Differential Revision: D2240328
      a1107271
    • Joe Richey's avatar
      Changing behavior of 'any' and 'all' sinks, adding in 'isEmpty' and 'notEmpty' sinks · 43d53e06
      Joe Richey authored
      Summary: When adding in the 'filter()' default behavior, I considered adding in similar
      behavior for 'any' and 'all'. However, we had 'any' with no funciton call
      basically check if anything was present, not testing a predicate. This can
      create a confusing senario, so I removed this behavior from 'any' and added in
      the 'isEmpty' and 'notEmpty' sinks. Now the calls 'any()' and 'all()' (called
      with parens, so old uses won't compile) check for truthy values simlar to
      'filter()'.
      
      I also added some unit tests and changed 'static const' objects to 'constexpr'.
      
      Reviewed By: @ddrcoder
      
      Differential Revision: D2234637
      43d53e06
    • Andrii Grynenko's avatar
      RequestContext support · cc671d29
      Andrii Grynenko authored
      Summary: Integrating RequestContext into fibers library. RequestContext is saved for every task, when that task is created. If RequestContext is overriden when a task is being run (within fiber, in runInMainContext, within function passed to await call) the new context will continue to be used for the task.
      
      Reviewed By: @alikhtarov
      
      Differential Revision: D2240152
      cc671d29
    • Lucian Grijincu's avatar
      folly: AsyncIOOp: improve logging message: add strerror · 5016d8c7
      Lucian Grijincu authored
      Reviewed By: @philippv
      
      Differential Revision: D2240628
      5016d8c7
    • Yedidya Feldblum's avatar
      Fix Build: folly/io/async/test/ScopedEventBasedThreadTest.cpp · 0525207e
      Yedidya Feldblum authored
      Summary: [Folly] Fix Build: folly/io/async/test/ScopedEventBasedThreadTest.cpp
      
      Failure with latest clang:
      
          folly/io/async/test/ScopedEventBaseThreadTest.cpp:72:8: error: explicitly moving variable of type 'folly::ScopedEventBaseThread' to itself [-Werror,-Wself-move]
            sebt = std::move(sebt);
      
      Reviewed By: @markisaa
      
      Differential Revision: D2238762
      0525207e
    • Yedidya Feldblum's avatar
      File ctor should take StringPiece. · e20eed09
      Yedidya Feldblum authored
      Summary: [Folly] File ctor should take StringPiece.
      
      This way we can use it with `std::string` and `folly::fbstring` a touch more easily.
      
      Reviewed By: @luciang
      
      Differential Revision: D2235870
      e20eed09
  5. 13 Jul, 2015 4 commits
  6. 09 Jul, 2015 6 commits
    • Joe Richey's avatar
      Added default value for filter's predicate argument · 91343de6
      Joe Richey authored
      Summary: After discussion with Tom about frozen files, we noticed that the use
      case of filtering out somthing that looks like false (0, nullptr, folly::none)
      is unnecessarily tedious. So folly::gen::filter now filters by the value of
      the item by default.
      
      Reviewed By: @ddrcoder
      
      Differential Revision: D2220582
      91343de6
    • Subodh Iyengar's avatar
      Add mocks for isBufferMovable · c78afbd2
      Subodh Iyengar authored
      Summary: Add mocks for the new isBufferMovable methods.
      
      Reviewed By: @yfeldblum
      
      Differential Revision: D2222642
      c78afbd2
    • Yedidya Feldblum's avatar
      ThreadedExecutor. · 7cb1a017
      Yedidya Feldblum authored
      Summary: [Folly] ThreadedExecutor.
      
      It's an Executor that runs functions each in its own thread.
      
      Kind of simple. Suitable for a few types of strange cases.
      
      Reviewed By: @​hannesr
      
      Differential Revision: D2226211
      7cb1a017
    • Tudor Bosman's avatar
      Add isManaged / makeManaged · 58059b6e
      Tudor Bosman authored
      Summary: Add a way to tell whether an IOBuf (either indvidually or the whole chain)
      refers to memory that's outside of IOBuf's control (via WRAP_BUFFER). That is,
      can you assume that clone() will extend the lifetime of the memory? Is it safe
      to use clone() instead of copying the data (and avoid a copy)?
      
      Reviewed By: @simpkins
      
      Differential Revision: D2191883
      58059b6e
    • Steve O'Brien's avatar
      folly/singleton: fatal in unrecoverable error cases · 6caa6956
      Steve O'Brien authored
      Summary: Early in the startup process there may not be a default signal handler installed, and stack traces are not available; also during the startup process is when init-order fiascos occur.  Dump a stacktrace and fatal when an unregistered singleton is used.
      
      Also fatals -- with glog `LOG(FATAL)`, which triggers an ABRT signal -- on other illegal and unrecoverable usage like double-registration or circular dependency.
      
      Reviewed By: @andriigrynenko
      
      Differential Revision: D2200408
      6caa6956
    • Mark McDuff's avatar
      high init priority for FiberManagerMap data · bf52653d
      Mark McDuff authored
      Summary: Ran into a bug in D2158570 where we dtor'ing these data structures before the event bases destructed, so the assert on line 47 (of the old code) failed.
      
      Reviewed By: @andriigrynenko
      
      Differential Revision: D2198318
      bf52653d