From a95bf7e0924df18a72b48bc8add71474dab8f218 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Thu, 21 Jan 2016 14:50:44 +0900 Subject: [PATCH] sensord: move poller to share library for using it commonly Change-Id: I7d04ffc339a787c64feba08b5d1e66143fd66103 Signed-off-by: kibak.yoon --- src/client/CMakeLists.txt | 2 -- src/client/csensor_event_listener.cpp | 6 +++--- src/client/csensor_event_listener.h | 3 ++- src/shared/CMakeLists.txt | 2 ++ src/{client => shared}/poller.cpp | 40 +++++++++++++++++------------------ src/{client => shared}/poller.h | 13 +++++------- 6 files changed, 32 insertions(+), 34 deletions(-) rename src/{client => shared}/poller.cpp (85%) rename src/{client => shared}/poller.h (83%) diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index e949a05..7653492 100755 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -34,7 +34,6 @@ add_library(${PROJECT_NAME} SHARED csensor_handle_info.cpp client_common.cpp command_channel.cpp - poller.cpp ) target_link_libraries(${PROJECT_NAME} ${lib_pkgs_LDFLAGS} "sensord-shared") @@ -43,7 +42,6 @@ SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${VERSION}) configure_file(${PROJECT_NAME}.pc.in ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc @ONLY) install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT RuntimeLibraries) -install(FILES poller.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sensor/) install(FILES creg_event_info.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sensor/) install(FILES csensor_event_listener.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sensor/) install(FILES sensor_info_manager.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sensor/) diff --git a/src/client/csensor_event_listener.cpp b/src/client/csensor_event_listener.cpp index 17a1dbb..6595309 100644 --- a/src/client/csensor_event_listener.cpp +++ b/src/client/csensor_event_listener.cpp @@ -391,7 +391,7 @@ gboolean csensor_event_listener::callback_dispatcher(gpointer data) -bool csensor_event_listener::sensor_event_poll(void* buffer, int buffer_len, int &event) +ssize_t csensor_event_listener::sensor_event_poll(void* buffer, int buffer_len, struct epoll_event &event) { ssize_t len; @@ -420,7 +420,7 @@ bool csensor_event_listener::sensor_event_poll(void* buffer, int buffer_len, int void csensor_event_listener::listen_events(void) { - int event; + struct epoll_event event; ssize_t len = -1; do { @@ -468,7 +468,7 @@ void csensor_event_listener::listen_events(void) INFO("Event listener thread is terminated."); - if (m_client_info.has_client_id() && (event & EPOLLHUP)) { + if (m_client_info.has_client_id() && (event.events & EPOLLHUP)) { if (m_hup_observer) m_hup_observer(); } diff --git a/src/client/csensor_event_listener.h b/src/client/csensor_event_listener.h index 21f28cf..72dc7e7 100644 --- a/src/client/csensor_event_listener.h +++ b/src/client/csensor_event_listener.h @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -104,7 +105,7 @@ private: bool create_event_channel(void); void close_event_channel(void); - bool sensor_event_poll(void* buffer, int buffer_len, int &event); + ssize_t sensor_event_poll(void* buffer, int buffer_len, struct epoll_event &event); void listen_events(void); client_callback_info* handle_calibration_cb(csensor_handle_info &handle_info, unsigned event_type, unsigned long long time, int accuracy); diff --git a/src/shared/CMakeLists.txt b/src/shared/CMakeLists.txt index cc46347..b648b2b 100644 --- a/src/shared/CMakeLists.txt +++ b/src/shared/CMakeLists.txt @@ -24,6 +24,7 @@ add_library(${PROJECT_NAME} SHARED csocket.cpp sensor_logs.cpp sensor_info.cpp + poller.cpp ) target_link_libraries(${PROJECT_NAME} ${shared_pkgs_LDFLAGS} "-lrt -ldl -pthread") @@ -35,6 +36,7 @@ install(FILES csocket.h cbase_lock.h sensor_info.h + poller.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} ) diff --git a/src/client/poller.cpp b/src/shared/poller.cpp similarity index 85% rename from src/client/poller.cpp rename to src/shared/poller.cpp index e174caf..d2861ad 100755 --- a/src/client/poller.cpp +++ b/src/shared/poller.cpp @@ -20,16 +20,27 @@ #include #include +#define EPOLL_MAX 32 + +poller::poller() +{ + m_epfd = epoll_create(EPOLL_MAX); +} + poller::poller(int fd) -: m_epfd(-1) +: poller() { - create(fd); + add_fd(fd); } -bool poller::create(int fd) +poller::~poller() { - m_epfd = epoll_create(1); + if (m_epfd) + close(m_epfd); +} +bool poller::add_fd(int fd) +{ struct epoll_event event; event.data.fd = fd; @@ -43,7 +54,6 @@ bool poller::create(int fd) return true; } - bool poller::fill_event_queue(void) { const int EPOLL_MAX_EVENT = 1; @@ -52,9 +62,8 @@ bool poller::fill_event_queue(void) int nr_events = epoll_wait(m_epfd, event_items, EPOLL_MAX_EVENT, -1); if (nr_events < 0) { - if (errno == EINTR) { + if (errno == EINTR) return true; - } ERR("Epoll failed errrno : %d , errstr : %s", errno, strerror(errno)); return false; @@ -66,16 +75,14 @@ bool poller::fill_event_queue(void) } for (int i = 0; i < nr_events; i++) - m_event_queue.push(event_items[i].events); + m_event_queue.push(event_items[i]); return true; } -bool poller::poll(int &event) +bool poller::poll(struct epoll_event &event) { - event = 0; - while (true) { if (m_event_queue.empty()) { if (!fill_event_queue()) @@ -86,12 +93,12 @@ bool poller::poll(int &event) event = m_event_queue.front(); m_event_queue.pop(); - if (event & EPOLLERR) { + if (event.events & EPOLLERR) { ERR("Poll error!"); return false; } - if (event & EPOLLHUP) { + if (event.events & EPOLLHUP) { INFO("Poll: Connetion is closed from the other side"); return false; } @@ -100,10 +107,3 @@ bool poller::poll(int &event) } } } - -poller::~poller() -{ - if (m_epfd) - close(m_epfd); -} - diff --git a/src/client/poller.h b/src/shared/poller.h similarity index 83% rename from src/client/poller.h rename to src/shared/poller.h index eaf7d93..8e91b0d 100755 --- a/src/client/poller.h +++ b/src/shared/poller.h @@ -20,26 +20,23 @@ #ifndef _POLLER_H_ #define _POLLER_H_ -#include #include #include -#include #include -#include -#include #include class poller { public: + poller(); poller(int fd); - ~poller(); + virtual ~poller(); - bool poll(int &event); + bool add_fd(int fd); + bool poll(struct epoll_event &event); private: int m_epfd; - std::queue m_event_queue; + std::queue m_event_queue; - bool create(int fd); bool fill_event_queue(void); }; -- 2.7.4