Commit 536bac28 authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by Facebook Github Bot

Always use an EventBaseManager with ScopedEventBaseThread

Summary: [Folly] Always use an `EventBaseManager` with `ScopedEventBaseThread`.

Reviewed By: andriigrynenko

Differential Revision: D4336412

fbshipit-source-id: 459a679f8fda0db1ca0a9fdca2f852bb00c5231e
parent a83ba29c
...@@ -24,19 +24,15 @@ using namespace std; ...@@ -24,19 +24,15 @@ using namespace std;
namespace folly { namespace folly {
static void run(EventBaseManager* ebm, EventBase* eb) { static void run(EventBaseManager* ebm, EventBase* eb) {
if (ebm) { ebm->setEventBase(eb, false);
ebm->setEventBase(eb, false);
}
CHECK_NOTNULL(eb)->loopForever(); CHECK_NOTNULL(eb)->loopForever();
if (ebm) { ebm->clearEventBase();
ebm->clearEventBase();
}
} }
ScopedEventBaseThread::ScopedEventBaseThread( ScopedEventBaseThread::ScopedEventBaseThread(
bool autostart, bool autostart,
EventBaseManager* ebm) : EventBaseManager* ebm)
ebm_(ebm) { : ebm_(ebm ? ebm : EventBaseManager::get()) {
if (autostart) { if (autostart) {
start(); start();
} }
......
...@@ -77,13 +77,20 @@ TEST_F(ScopedEventBaseThreadTest, self_move) { ...@@ -77,13 +77,20 @@ TEST_F(ScopedEventBaseThreadTest, self_move) {
ASSERT_TRUE(done.timed_wait(seconds(1))); 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; EventBaseManager ebm;
ScopedEventBaseThread sebt(&ebm); ScopedEventBaseThread sebt(&ebm);
auto sebt_eb = sebt.getEventBase(); auto sebt_eb = sebt.getEventBase();
auto ebm_eb = (EventBase*)nullptr; auto ebm_eb = static_cast<EventBase*>(nullptr);
sebt_eb->runInEventBaseThreadAndWait([&] { sebt_eb->runInEventBaseThreadAndWait([&] { ebm_eb = ebm.getEventBase(); });
ebm_eb = ebm.getEventBase();
});
EXPECT_EQ(uintptr_t(sebt_eb), uintptr_t(ebm_eb)); EXPECT_EQ(uintptr_t(sebt_eb), uintptr_t(ebm_eb));
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment