From d33f0648c79f1436a0aeb78cf8c52b8ca9156e20 Mon Sep 17 00:00:00 2001 From: Boram Bae Date: Tue, 7 Apr 2020 18:52:36 +0900 Subject: [PATCH] Add a lock to event_loop Change-Id: I610fa0ffaebd256b184f9e5e4c8e2fd79b02cc75 Signed-off-by: Boram Bae --- src/shared/event_loop.cpp | 8 ++++++-- src/shared/event_loop.h | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/shared/event_loop.cpp b/src/shared/event_loop.cpp index 956acad..a49a2e4 100644 --- a/src/shared/event_loop.cpp +++ b/src/shared/event_loop.cpp @@ -113,6 +113,7 @@ void event_loop::set_mainloop(GMainLoop *mainloop) uint64_t event_loop::add_event(const int fd, const event_condition cond, event_handler *handler) { + AUTOLOCK(m_cmutex); GIOChannel *ch = NULL; GSource *src = NULL; @@ -154,6 +155,7 @@ struct idler_data { size_t event_loop::add_idle_event(unsigned int priority, void (*fn)(size_t, void*), void* data) { + AUTOLOCK(m_cmutex); GSource *src; retvm_if(m_terminating.load(), 0, @@ -181,6 +183,7 @@ size_t event_loop::add_idle_event(unsigned int priority, void (*fn)(size_t, void bool event_loop::remove_event(uint64_t id, bool close_channel) { + AUTOLOCK(m_cmutex); auto it = m_handlers.find(id); retv_if(it == m_handlers.end(), false); @@ -196,6 +199,7 @@ bool event_loop::remove_event(uint64_t id, bool close_channel) void event_loop::remove_all_events(void) { + AUTOLOCK(m_cmutex); auto it = m_handlers.begin(); while (it != m_handlers.end()) { release_info(it->second); @@ -217,13 +221,13 @@ void event_loop::release_info(handler_info *info) channel_event_handler *ce_handler = nullptr; ce_handler = dynamic_cast(info->handler); if (ce_handler) { - _D("Add idle event for lazy release : handler[%p]", ce_handler); + // _D("Add idle event for lazy release : handler[%p] event[%llu]", ce_handler, info->id); add_idle_event(0, [](size_t, void *data) { channel_event_handler *handler = (channel_event_handler *)data; delete handler; }, ce_handler); } else { - _D("Release handler[%p]", info->handler); + // _D("Release handler[%p] event[%llu]", info->handler, info->id); delete info->handler; } diff --git a/src/shared/event_loop.h b/src/shared/event_loop.h index d0d16d1..405f628 100644 --- a/src/shared/event_loop.h +++ b/src/shared/event_loop.h @@ -26,6 +26,7 @@ #include #include "event_handler.h" +#include "cmutex.h" namespace ipc { @@ -97,6 +98,7 @@ private: std::map m_handlers; int m_term_fd; + cmutex m_cmutex; }; } -- 2.7.4