Disable ASAN for Fiber::init()
authorAndre Pinto <aap@fb.com>
Fri, 1 May 2015 19:04:52 +0000 (12:04 -0700)
committerPraveen Kumar Ramakrishnan <praveenr@fb.com>
Tue, 12 May 2015 00:02:06 +0000 (17:02 -0700)
Summary:
Fiber::init() method modifies all the bytes in the fiber's stack in
order to produce a high watermark of stack memory usage. This behavior
generates ASAN errors, as it modifies stack red zones. For that reason,
ASAN is disabled for that particular method.

Test Plan:
Unit tests

Reviewed By: alikhtarov@fb.com

Subscribers: folly-diffs@, yfeldblum, chalfant

FB internal diff: D2036280

Tasks: 6861962

Signature: t1:2036280:1430439550:e156e0e06fae3615d9d9204e99acaf3072bbfafd

folly/experimental/fibers/Fiber.cpp

index 19d4b19835f35c73b3716a284be853536d23c5b9..3b5e01c82d18b8b7e8c0168c7c0120540fd12130 100644 (file)
@@ -23,6 +23,7 @@
 #include <cstring>
 #include <stdexcept>
 
+#include <folly/CPortability.h>
 #include <folly/Likely.h>
 #include <folly/Portability.h>
 #include <folly/experimental/fibers/BoostContextCompatibility.h>
@@ -77,6 +78,8 @@ Fiber::Fiber(FiberManager& fiberManager) :
   fcontext_ = makeContext(limit, size, &Fiber::fiberFuncHelper);
 }
 
+// It is necessary to disable ASAN because this function changes fiber's stack.
+FOLLY_DISABLE_ADDRESS_SANITIZER
 void Fiber::init(bool recordStackUsed) {
   recordStackUsed_ = recordStackUsed;
   if (UNLIKELY(recordStackUsed_ && !stackFilledWithMagic_)) {