folly::fibers::Baton baton3;
folly::fibers::Baton baton4;
- folly::RequestContext::create();
- auto rcontext1 = folly::RequestContext::get();
- fm.addTask([&]() {
- EXPECT_EQ(rcontext1, folly::RequestContext::get());
- baton1.wait([&]() { EXPECT_EQ(rcontext1, folly::RequestContext::get()); });
- EXPECT_EQ(rcontext1, folly::RequestContext::get());
- runInMainContext(
- [&]() { EXPECT_EQ(rcontext1, folly::RequestContext::get()); });
- checkRun1 = true;
- });
-
- folly::RequestContext::create();
- auto rcontext2 = folly::RequestContext::get();
- fm.addTaskRemote([&]() {
- EXPECT_EQ(rcontext2, folly::RequestContext::get());
- baton2.wait();
- EXPECT_EQ(rcontext2, folly::RequestContext::get());
- checkRun2 = true;
- });
-
- folly::RequestContext::create();
- auto rcontext3 = folly::RequestContext::get();
- fm.addTaskFinally(
- [&]() {
- EXPECT_EQ(rcontext3, folly::RequestContext::get());
- baton3.wait();
- EXPECT_EQ(rcontext3, folly::RequestContext::get());
-
- return folly::Unit();
- },
- [&](Try<folly::Unit>&& /* t */) {
- EXPECT_EQ(rcontext3, folly::RequestContext::get());
- checkRun3 = true;
- });
-
- folly::RequestContext::setContext(nullptr);
- fm.addTask([&]() {
- folly::RequestContext::create();
- auto rcontext4 = folly::RequestContext::get();
- baton4.wait();
- EXPECT_EQ(rcontext4, folly::RequestContext::get());
- checkRun4 = true;
- });
-
- folly::RequestContext::create();
- auto rcontext = folly::RequestContext::get();
+ {
+ folly::RequestContextScopeGuard rctx;
+ auto rcontext1 = folly::RequestContext::get();
+ fm.addTask([&]() {
+ EXPECT_EQ(rcontext1, folly::RequestContext::get());
+ baton1.wait(
+ [&]() { EXPECT_EQ(rcontext1, folly::RequestContext::get()); });
+ EXPECT_EQ(rcontext1, folly::RequestContext::get());
+ runInMainContext(
+ [&]() { EXPECT_EQ(rcontext1, folly::RequestContext::get()); });
+ checkRun1 = true;
+ });
+ }
+ {
+ folly::RequestContextScopeGuard rctx;
+ auto rcontext2 = folly::RequestContext::get();
+ fm.addTaskRemote([&]() {
+ EXPECT_EQ(rcontext2, folly::RequestContext::get());
+ baton2.wait();
+ EXPECT_EQ(rcontext2, folly::RequestContext::get());
+ checkRun2 = true;
+ });
+ }
+ {
+ folly::RequestContextScopeGuard rctx;
+ auto rcontext3 = folly::RequestContext::get();
+ fm.addTaskFinally(
+ [&]() {
+ EXPECT_EQ(rcontext3, folly::RequestContext::get());
+ baton3.wait();
+ EXPECT_EQ(rcontext3, folly::RequestContext::get());
+
+ return folly::Unit();
+ },
+ [&](Try<folly::Unit>&& /* t */) {
+ EXPECT_EQ(rcontext3, folly::RequestContext::get());
+ checkRun3 = true;
+ });
+ }
+ {
+ folly::RequestContext::setContext(nullptr);
+ fm.addTask([&]() {
+ folly::RequestContextScopeGuard rctx;
+ auto rcontext4 = folly::RequestContext::get();
+ baton4.wait();
+ EXPECT_EQ(rcontext4, folly::RequestContext::get());
+ checkRun4 = true;
+ });
+ }
+ {
+ folly::RequestContextScopeGuard rctx;
+ auto rcontext = folly::RequestContext::get();
- fm.loopUntilNoReady();
- EXPECT_EQ(rcontext, folly::RequestContext::get());
+ fm.loopUntilNoReady();
+ EXPECT_EQ(rcontext, folly::RequestContext::get());
- baton1.post();
- EXPECT_EQ(rcontext, folly::RequestContext::get());
- fm.loopUntilNoReady();
- EXPECT_TRUE(checkRun1);
- EXPECT_EQ(rcontext, folly::RequestContext::get());
+ baton1.post();
+ EXPECT_EQ(rcontext, folly::RequestContext::get());
+ fm.loopUntilNoReady();
+ EXPECT_TRUE(checkRun1);
+ EXPECT_EQ(rcontext, folly::RequestContext::get());
- baton2.post();
- EXPECT_EQ(rcontext, folly::RequestContext::get());
- fm.loopUntilNoReady();
- EXPECT_TRUE(checkRun2);
- EXPECT_EQ(rcontext, folly::RequestContext::get());
+ baton2.post();
+ EXPECT_EQ(rcontext, folly::RequestContext::get());
+ fm.loopUntilNoReady();
+ EXPECT_TRUE(checkRun2);
+ EXPECT_EQ(rcontext, folly::RequestContext::get());
- baton3.post();
- EXPECT_EQ(rcontext, folly::RequestContext::get());
- fm.loopUntilNoReady();
- EXPECT_TRUE(checkRun3);
- EXPECT_EQ(rcontext, folly::RequestContext::get());
+ baton3.post();
+ EXPECT_EQ(rcontext, folly::RequestContext::get());
+ fm.loopUntilNoReady();
+ EXPECT_TRUE(checkRun3);
+ EXPECT_EQ(rcontext, folly::RequestContext::get());
- baton4.post();
- EXPECT_EQ(rcontext, folly::RequestContext::get());
- fm.loopUntilNoReady();
- EXPECT_TRUE(checkRun4);
- EXPECT_EQ(rcontext, folly::RequestContext::get());
+ baton4.post();
+ EXPECT_EQ(rcontext, folly::RequestContext::get());
+ fm.loopUntilNoReady();
+ EXPECT_TRUE(checkRun4);
+ EXPECT_EQ(rcontext, folly::RequestContext::get());
+ }
}
TEST(FiberManager, resizePeriodically) {
bool value;
};
- NewThreadExecutor e;
- RequestContext::create();
- RequestContext::get()->setContextData("key",
- folly::make_unique<MyRequestData>(true));
- auto checker = [](int lineno) {
- return [lineno](Try<int>&& /* t */) {
- auto d = static_cast<MyRequestData*>(
- RequestContext::get()->getContextData("key"));
- EXPECT_TRUE(d && d->value) << "on line " << lineno;
+ Promise<int> p1, p2;
+ {
+ NewThreadExecutor e;
+ folly::RequestContextScopeGuard rctx;
+ RequestContext::get()->setContextData(
+ "key", folly::make_unique<MyRequestData>(true));
+ auto checker = [](int lineno) {
+ return [lineno](Try<int>&& /* t */) {
+ auto d = static_cast<MyRequestData*>(
+ RequestContext::get()->getContextData("key"));
+ EXPECT_TRUE(d && d->value) << "on line " << lineno;
+ };
};
- };
- makeFuture(1).via(&e).then(checker(__LINE__));
+ makeFuture(1).via(&e).then(checker(__LINE__));
- e.setHandlesPriorities();
- makeFuture(2).via(&e).then(checker(__LINE__));
+ e.setHandlesPriorities();
+ makeFuture(2).via(&e).then(checker(__LINE__));
- Promise<int> p1, p2;
- p1.getFuture().then(checker(__LINE__));
-
- e.setThrowsOnAdd();
- p2.getFuture().via(&e).then(checker(__LINE__));
+ p1.getFuture().then(checker(__LINE__));
- RequestContext::create();
+ e.setThrowsOnAdd();
+ p2.getFuture().via(&e).then(checker(__LINE__));
+ }
+ // Assert that no RequestContext is set
+ EXPECT_FALSE(RequestContext::saveContext());
p1.setValue(3);
p2.setValue(4);
}