Skip to content

Commit e8aced0

Browse files
committed
feat(base,event): 使用config.mk配置项来选择是否启用epoll与backtrace
1 parent a5400aa commit e8aced0

File tree

6 files changed

+89
-48
lines changed

6 files changed

+89
-48
lines changed

config.mk

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,7 @@ THIRDPARTY += nlohmann
4545

4646
## 编译配置
4747
CCFLAGS += -DENABLE_TRACE_RECORDER=1
48+
49+
## 其它配置
50+
export HAVE_EXECINFO_H = yes
51+
export HAVE_EPOLL = yes

modules/base/Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,11 @@ CPP_SRC_FILES = \
5858
pre_build:
5959
touch version.cpp
6060

61-
CXXFLAGS := -DMODULE_ID='"tbox.base"' $(CXXFLAGS)
61+
CXXFLAGS += -DMODULE_ID='"tbox.base"'
62+
63+
ifeq ($(HAVE_EXECINFO_H),yes)
64+
CXXFLAGS += -DHAVE_EXECINFO_H=1
65+
endif
6266

6367
TEST_CPP_SRC_FILES = \
6468
$(CPP_SRC_FILES) \

modules/event/Makefile

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ LIB_VERSION_X = 1
2424
LIB_VERSION_Y = 2
2525
LIB_VERSION_Z = 0
2626

27+
HAVE_EPOLL ?= yes # 默认支持epoll
28+
29+
CXXFLAGS += -DMODULE_ID='"tbox.event"'
30+
2731
HEAD_FILES = \
2832
forward.h \
2933
loop.h \
@@ -43,19 +47,24 @@ CPP_SRC_FILES = \
4347
signal_event_impl.cpp \
4448
misc.cpp \
4549
stat.cpp \
46-
engines/epoll/loop.cpp \
47-
engines/epoll/fd_event.cpp \
4850
engines/select/loop.cpp \
4951
engines/select/fd_event.cpp \
5052

53+
ifeq ($(HAVE_EPOLL),yes)
54+
CXXFLAGS += -DHAVE_EPOLL=1
55+
56+
CPP_SRC_FILES += \
57+
engines/epoll/loop.cpp \
58+
engines/epoll/fd_event.cpp
59+
endif
60+
5161
TEST_CPP_SRC_FILES = \
5262
$(CPP_SRC_FILES) \
5363
common_loop_test.cpp \
5464
fd_event_test.cpp \
5565
timer_event_test.cpp \
5666
signal_event_test.cpp \
5767

58-
CXXFLAGS := -DMODULE_ID='"tbox.event"' $(CXXFLAGS)
5968

6069
TEST_LDFLAGS := $(LDFLAGS) -ltbox_base -ldl
6170

modules/event/engines/select/loop.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919
*/
2020
#include <sys/select.h>
2121

22+
#include <cstring>
2223
#include <algorithm>
2324

25+
#include <tbox/base/log.h>
2426
#include <tbox/base/assert.h>
2527
#include <tbox/base/wrapped_recorder.h>
2628

@@ -72,6 +74,9 @@ void SelectLoop::runLoop(Mode mode)
7274
SelectFdEvent::OnEventCallback(is_readable, is_writable, is_except, data);
7375
}
7476
}
77+
} else if (select_ret == -1) {
78+
LogErrno(errno, "select error");
79+
break;
7580
}
7681

7782
//handleRunInLoopFunc();

modules/event/fd_event_test.cpp

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
#include <errno.h>
2525
#include <cstring>
26+
#include <tbox/base/log_output.h>
2627

2728
#include "loop.h"
2829
#include "fd_event.h"
@@ -348,57 +349,64 @@ TEST(FdEvent, Reinitialize)
348349
/// Test exception events
349350
TEST(FdEvent, Exception)
350351
{
351-
int read_fd, write_fd;
352-
bool ok = tbox::event::CreateFdPair(read_fd, write_fd);
353-
ASSERT_TRUE(ok);
352+
LogOutput_Enable();
354353

355-
auto loop = Loop::New();
356-
auto read_fd_event = loop->newFdEvent();
357-
auto write_fd_event = loop->newFdEvent();
354+
auto engines = Loop::Engines();
355+
for (auto e : engines) {
356+
cout << "engine: " << e << endl;
358357

359-
ASSERT_TRUE(read_fd_event != nullptr);
360-
ASSERT_TRUE(write_fd_event != nullptr);
358+
int read_fd, write_fd;
359+
bool ok = tbox::event::CreateFdPair(read_fd, write_fd);
360+
ASSERT_TRUE(ok);
361361

362-
int run_time = 0;
362+
auto loop = Loop::New(e);
363+
auto read_fd_event = loop->newFdEvent();
364+
auto write_fd_event = loop->newFdEvent();
363365

364-
EXPECT_TRUE(read_fd_event->initialize(read_fd, FdEvent::kReadEvent | FdEvent::kHupEvent, Event::Mode::kPersist));
365-
read_fd_event->setCallback([&](short events){
366-
if (events & FdEvent::kReadEvent) {
367-
char data[100] = { 0};
368-
ssize_t len = read(read_fd, data, sizeof(data));
369-
EXPECT_EQ(len, sizeof(int));
370-
}
366+
ASSERT_TRUE(read_fd_event != nullptr);
367+
ASSERT_TRUE(write_fd_event != nullptr);
371368

372-
if (events & FdEvent::kHupEvent) {
373-
++run_time;
374-
loop->exitLoop();
375-
}
376-
});
369+
int run_time = 0;
377370

378-
read_fd_event->enable();
371+
EXPECT_TRUE(read_fd_event->initialize(read_fd, FdEvent::kReadEvent | FdEvent::kHupEvent, Event::Mode::kPersist));
372+
read_fd_event->setCallback([&](short events){
373+
if (events & FdEvent::kReadEvent) {
374+
char data[100] = { 0};
375+
ssize_t len = read(read_fd, data, sizeof(data));
376+
EXPECT_EQ(len, sizeof(int));
377+
}
379378

380-
EXPECT_TRUE(write_fd_event->initialize(write_fd, FdEvent::kWriteEvent, Event::Mode::kPersist));
381-
write_fd_event->setCallback([&](short events){
382-
if (events & FdEvent::kWriteEvent) {
383-
int data = 0;
384-
ssize_t ret = write(write_fd, &data, sizeof(data));
385-
EXPECT_EQ(ret, sizeof(data));
386-
close(write_fd);
387-
}
388-
});
379+
if (events & FdEvent::kHupEvent) {
380+
++run_time;
381+
loop->exitLoop();
382+
}
383+
});
384+
385+
read_fd_event->enable();
386+
387+
EXPECT_TRUE(write_fd_event->initialize(write_fd, FdEvent::kWriteEvent, Event::Mode::kPersist));
388+
write_fd_event->setCallback([&](short events){
389+
if (events & FdEvent::kWriteEvent) {
390+
int data = 0;
391+
ssize_t ret = write(write_fd, &data, sizeof(data));
392+
EXPECT_EQ(ret, sizeof(data));
393+
close(write_fd);
394+
}
395+
});
389396

390-
write_fd_event->enable();
397+
write_fd_event->enable();
391398

392-
loop->runLoop();
399+
loop->runLoop();
393400

394-
EXPECT_EQ(run_time, 1);
401+
EXPECT_EQ(run_time, 1);
395402

396-
read_fd_event->disable();
397-
write_fd_event->disable();
403+
read_fd_event->disable();
404+
write_fd_event->disable();
398405

399-
delete read_fd_event;
400-
delete write_fd_event;
401-
delete loop;
406+
delete read_fd_event;
407+
delete write_fd_event;
408+
delete loop;
409+
}
402410
}
403411

404412
}

modules/event/loop.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* \\ \ \ /
1010
* -============'
1111
*
12-
* Copyright (c) 2018 Hevake and contributors, all rights reserved.
12+
* Copyright (c) 2024 Hevake and contributors, all rights reserved.
1313
*
1414
* This file is part of cpp-tbox (https://github.com/cpp-main/cpp-tbox)
1515
* Use of this source code is governed by MIT license that can be found
@@ -20,23 +20,32 @@
2020
#include "loop.h"
2121
#include <tbox/base/log.h>
2222

23-
#include "engines/epoll/loop.h"
2423
#include "engines/select/loop.h"
2524

25+
#if HAVE_EPOLL
26+
#include "engines/epoll/loop.h"
27+
#endif
28+
2629
namespace tbox {
2730
namespace event {
2831

2932
Loop* Loop::New()
3033
{
34+
#if HAVE_EPOLL
3135
return new EpollLoop;
36+
#else
37+
return new SelectLoop;
38+
#endif
3239
}
3340

3441
Loop* Loop::New(const std::string &engine_type)
3542
{
36-
if (engine_type == "epoll")
37-
return new EpollLoop;
38-
else if (engine_type == "select")
43+
if (engine_type == "select")
3944
return new SelectLoop;
45+
#if HAVE_EPOLL
46+
else if (engine_type == "epoll")
47+
return new EpollLoop;
48+
#endif
4049

4150
return nullptr;
4251
}
@@ -45,7 +54,9 @@ std::vector<std::string> Loop::Engines()
4554
{
4655
std::vector<std::string> types;
4756

57+
#if HAVE_EPOLL
4858
types.push_back("epoll");
59+
#endif
4960
types.push_back("select");
5061
return types;
5162
}

0 commit comments

Comments
 (0)