Skip to content

Commit a6e3081

Browse files
author
hamid
committed
Handle ownership of ev_loop in event_loop_ev
1 parent e93ec4e commit a6e3081

File tree

4 files changed

+17
-7
lines changed

4 files changed

+17
-7
lines changed

includes/libevpp/event_loop/event_loop_ev.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ namespace libevpp {
1616
public:
1717
event_loop_ev();
1818
event_loop_ev(struct ev_loop *);
19+
~event_loop_ev();
1920

2021
void run();
2122

@@ -26,9 +27,9 @@ namespace libevpp {
2627
bool async_read(socket_identifier_t& id, action&& cb);
2728
void async_timeout(double time, timer_action&& cb );
2829

29-
3030
private:
3131
struct ev_loop* loop_;
32+
const bool loop_owner_;
3233
};
3334
}
3435
}

includes/libevpp/event_loop/timer_watcher.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ class timer_watcher
1616

1717
void start();
1818
void repeat();
19+
void stop();
1920

2021
private:
2122
static void timer_handler(EV_P_ ev_timer* w, int revents);
2223

2324
private:
24-
timer_action timeout_cb;
25+
timer_action&& timeout_cb;
2526
ev_timer timer;
2627
double time_;
2728
struct ev_loop* loop_;

src/event_loop/event_loop_ev.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,21 @@ namespace libevpp {
44
namespace event_loop {
55

66
event_loop_ev::event_loop_ev()
7-
: loop_(EV_DEFAULT)
7+
: loop_(EV_DEFAULT), loop_owner_(true)
88
{
99
}
1010

1111
event_loop_ev::event_loop_ev(struct ev_loop* loop)
12-
: loop_(loop)
12+
: loop_(loop), loop_owner_(false)
1313
{
1414
}
1515

16+
event_loop_ev::~event_loop_ev()
17+
{
18+
if (loop_owner_)
19+
ev_loop_destroy(loop_);
20+
}
21+
1622
void event_loop_ev::run()
1723
{
1824
ev_run(loop_, 0);
@@ -42,8 +48,6 @@ void event_loop_ev::async_timeout(double time, timer_action&& cb )
4248
w->start();
4349
}
4450

45-
46-
4751
event_loop_ev::socket_identifier_t event_loop_ev::watch(int fd)
4852
{
4953
return std::make_unique<socket_watcher>(loop_, fd);

src/event_loop/timer_watcher.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,17 @@ timer_watcher::timer_watcher(struct ev_loop* loop, double time, timer_action&& c
1111
}
1212

1313
timer_watcher::~timer_watcher() {
14-
ev_timer_stop(loop_, &timer);
14+
stop();
1515
}
1616

1717
void timer_watcher::start() {
1818
ev_timer_start (loop_, &timer);
1919
}
2020

21+
void timer_watcher::stop() {
22+
ev_timer_stop(loop_, &timer);
23+
}
24+
2125
void timer_watcher::repeat() {
2226
timer.repeat = time_;
2327
ev_timer_again(loop_, &timer);

0 commit comments

Comments
 (0)