(wangle) fix after-delete assert
authorHans Fugal <fugalh@fb.com>
Tue, 21 Oct 2014 22:50:02 +0000 (15:50 -0700)
committerdcsommer <dcsommer@fb.com>
Wed, 29 Oct 2014 23:04:10 +0000 (16:04 -0700)
Summary:
This would cause debug builds to do a bad thing (access the variable `this->detached_` within an assert, after `delete this`).

Test Plan: unit tests

Hopefully now that we have a dummy cpp file in `folly/wangle/detail` contbuild
will pick it up and all the dependencies will also run their tests.
Right now, we suspect maybe maelstrom (@wez) and adinvoicer and zookeeper
(@jying) and probably others are seeing this in unit test failures (esp. if
they use asan, which is rightly detecting read after free). Hoping contbuild
will catch them.

Reviewed By: davejwatson@fb.com

Subscribers: net-systems@, fugalh, exa, njormrod, folly-diffs@, wez, dcapel, jying, cgheorghe

FB internal diff: D1630301

Tasks: 54245465435720

Blame Revision: D1618240

folly/wangle/detail/Core.h

index d45b985d4358328243384c7c5a4e47229670bbcd..9b9295d89688b2d2e2ecd4b2c64600f85c432116 100644 (file)
@@ -205,12 +205,13 @@ class Core : protected FSM<State> {
   }
 
   void detachOne() {
-    if (++detached_ == 2) {
+    ++detached_;
+    assert(detached_ == 1 || detached_ == 2);
+    if (detached_ == 2) {
       // we should have already executed the callback with the value
       assert(calledBack_);
       delete this;
     }
-    assert(detached_ == 1 || detached_ == 2);
   }
 
   folly::Optional<Try<T>> result_;