Always use an EventBaseManager with ScopedEventBaseThread
authorYedidya Feldblum <yfeldblum@fb.com>
Fri, 16 Dec 2016 05:21:21 +0000 (21:21 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Fri, 16 Dec 2016 05:33:01 +0000 (21:33 -0800)
Summary: [Folly] Always use an `EventBaseManager` with `ScopedEventBaseThread`.

Reviewed By: andriigrynenko

Differential Revision: D4336412

fbshipit-source-id: 459a679f8fda0db1ca0a9fdca2f852bb00c5231e

folly/io/async/ScopedEventBaseThread.cpp
folly/io/async/test/ScopedEventBaseThreadTest.cpp

index c783c1c8088207c3c2674d1268c24b1ca4c562e6..29fa4522ff553af02080376e7605243b69b09736 100644 (file)
@@ -24,19 +24,15 @@ using namespace std;
 namespace folly {
 
 static void run(EventBaseManager* ebm, EventBase* eb) {
-  if (ebm) {
-    ebm->setEventBase(eb, false);
-  }
+  ebm->setEventBase(eb, false);
   CHECK_NOTNULL(eb)->loopForever();
-  if (ebm) {
-    ebm->clearEventBase();
-  }
+  ebm->clearEventBase();
 }
 
 ScopedEventBaseThread::ScopedEventBaseThread(
     bool autostart,
-    EventBaseManager* ebm) :
-  ebm_(ebm) {
+    EventBaseManager* ebm)
+    : ebm_(ebm ? ebm : EventBaseManager::get()) {
   if (autostart) {
     start();
   }
index 6832f347afed182b3fe9b900d4872b9775abcd2a..6d7ba4c149852e19d98368ebbbe680abd2b2c441 100644 (file)
@@ -77,13 +77,20 @@ TEST_F(ScopedEventBaseThreadTest, self_move) {
   ASSERT_TRUE(done.timed_wait(seconds(1)));
 }
 
-TEST_F(ScopedEventBaseThreadTest, manager) {
+TEST_F(ScopedEventBaseThreadTest, default_manager) {
+  auto ebm = EventBaseManager::get();
+  ScopedEventBaseThread sebt;
+  auto sebt_eb = sebt.getEventBase();
+  auto ebm_eb = static_cast<EventBase*>(nullptr);
+  sebt_eb->runInEventBaseThreadAndWait([&] { ebm_eb = ebm->getEventBase(); });
+  EXPECT_EQ(uintptr_t(sebt_eb), uintptr_t(ebm_eb));
+}
+
+TEST_F(ScopedEventBaseThreadTest, custom_manager) {
   EventBaseManager ebm;
   ScopedEventBaseThread sebt(&ebm);
   auto sebt_eb = sebt.getEventBase();
-  auto ebm_eb = (EventBase*)nullptr;
-  sebt_eb->runInEventBaseThreadAndWait([&] {
-      ebm_eb = ebm.getEventBase();
-  });
+  auto ebm_eb = static_cast<EventBase*>(nullptr);
+  sebt_eb->runInEventBaseThreadAndWait([&] { ebm_eb = ebm.getEventBase(); });
   EXPECT_EQ(uintptr_t(sebt_eb), uintptr_t(ebm_eb));
 }