diff options
author | Mauro Sardara <msardara@cisco.com> | 2019-03-07 19:11:16 +0100 |
---|---|---|
committer | Mauro Sardara <msardara@cisco.com> | 2019-03-08 13:32:22 +0100 |
commit | 6aaef596f68a514036d5212fc8697bdaf371e5af (patch) | |
tree | d09237bb6810c4aa5eff1a3033633e46bb44e3f6 /libtransport/src/hicn/transport/utils/epoll_event_reactor.h | |
parent | 3c6c43ef7bc7caa03540b2347e7f180d5b96ec23 (diff) |
[HICN-99] Destroy in the correct order and in the correct event loop the attributes of connectors and sockets. Cleanup of prints.
Change-Id: Ie7eef1d186e581aa950f47df20d57681dc33be55
Signed-off-by: Mauro Sardara <msardara@cisco.com>
Diffstat (limited to 'libtransport/src/hicn/transport/utils/epoll_event_reactor.h')
-rw-r--r-- | libtransport/src/hicn/transport/utils/epoll_event_reactor.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/libtransport/src/hicn/transport/utils/epoll_event_reactor.h b/libtransport/src/hicn/transport/utils/epoll_event_reactor.h index dbb87c6c5..04c10fc7e 100644 --- a/libtransport/src/hicn/transport/utils/epoll_event_reactor.h +++ b/libtransport/src/hicn/transport/utils/epoll_event_reactor.h @@ -16,6 +16,7 @@ #pragma once #include <hicn/transport/utils/event_reactor.h> +#include <hicn/transport/utils/spinlock.h> #include <sys/epoll.h> #include <atomic> @@ -38,9 +39,22 @@ class EpollEventReactor : public EventReactor { ~EpollEventReactor(); - int addFileDescriptor(int fd, uint32_t events, EventCallback &callback); + template <typename EventHandler> + int addFileDescriptor(int fd, uint32_t events, EventHandler &&callback) { + auto it = event_callback_map_.find(fd); + int ret = 0; - int addFileDescriptor(int fd, uint32_t events, EventCallback &&callback); + if (it == event_callback_map_.end()) { + { + utils::SpinLock::Acquire locked(event_callback_map_lock_); + event_callback_map_[fd] = std::forward<EventHandler &&>(callback); + } + + ret = addFileDescriptor(fd, events); + } + + return ret; + } int delFileDescriptor(int fd); @@ -60,7 +74,7 @@ class EpollEventReactor : public EventReactor { int epoll_fd_; std::atomic_bool run_event_loop_; EventCallbackMap event_callback_map_; - std::mutex event_callback_map_mutex_; + utils::SpinLock event_callback_map_lock_; }; } // namespace utils |