From: SangYoun Kwak Date: Thu, 9 May 2024 08:23:30 +0000 (+0900) Subject: Add logs and error handling codes for sensor listener X-Git-Tag: accepted/tizen/8.0/unified/20240520.155113~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ae00bc43f64aeb239d06cc78915e1ee7dc86e63a;p=platform%2Fcore%2Fsystem%2Fsensord.git Add logs and error handling codes for sensor listener If listener connection is failed, it should be handled as an error. Previously, if connection is failed, it is not handled and treated as success. To handle 'connection failure' situation, return statement and state member variable(indicates if sensor_listener is successfully initialized) are added. Change-Id: I4801ac7fb78cbbf1dea7808eed3ba84e9f3ab362 Signed-off-by: SangYoun Kwak --- diff --git a/src/client/sensor_internal.cpp b/src/client/sensor_internal.cpp index f7a7674d..7495933d 100644 --- a/src/client/sensor_internal.cpp +++ b/src/client/sensor_internal.cpp @@ -342,6 +342,11 @@ API int sensord_connect(sensor_t sensor) listener = new(std::nothrow) sensor::sensor_listener(sensor, reader.get_event_loop()); retvm_if(!listener, -ENOMEM, "Failed to allocate memory"); + if (listener->get_initialized() == false) { + _E("Failed to initialize listener"); + delete listener; + return -1; + } listeners[listener->get_id()] = listener; diff --git a/src/client/sensor_listener.cpp b/src/client/sensor_listener.cpp index 7c3ab4b2..1b8741b3 100644 --- a/src/client/sensor_listener.cpp +++ b/src/client/sensor_listener.cpp @@ -95,7 +95,8 @@ private: }; sensor_listener::sensor_listener(sensor_t sensor) -: m_id(0) +: m_initialized(false) +, m_id(0) , m_sensor(reinterpret_cast(sensor)) , m_client(NULL) , m_cmd_channel(NULL) @@ -108,11 +109,12 @@ sensor_listener::sensor_listener(sensor_t sensor) , m_connected(false) , m_started(false) { - init(); + m_initialized = init(); } sensor_listener::sensor_listener(sensor_t sensor, ipc::event_loop *loop) -: m_id(0) +: m_initialized(false) +, m_id(0) , m_sensor(reinterpret_cast(sensor)) , m_client(NULL) , m_cmd_channel(NULL) @@ -126,7 +128,7 @@ sensor_listener::sensor_listener(sensor_t sensor, ipc::event_loop *loop) , m_connected(false) , m_started(false) { - init(); + m_initialized = init(); } sensor_listener::~sensor_listener() @@ -147,6 +149,7 @@ bool sensor_listener::init(void) } if (!connect()) { + _E("Failed to connect"); delete m_handler; delete m_client; m_handler = NULL; @@ -178,9 +181,17 @@ void sensor_listener::deinit(void) m_attributes_int.clear(); m_attributes_str.clear(); + + m_initialized = false; + _D("Deinitialized.."); } +bool sensor_listener::get_initialized(void) +{ + return m_initialized; +} + int sensor_listener::get_id(void) { return m_id; @@ -239,9 +250,15 @@ bool sensor_listener::connect(void) memcpy(buf.sensor, m_sensor->get_uri().c_str(), m_sensor->get_uri().size()); msg.set_type(CMD_LISTENER_CONNECT); msg.enclose((const char *)&buf, sizeof(buf)); - m_evt_channel->send_sync(msg); - m_evt_channel->read_sync(reply); + if (m_evt_channel->send_sync(msg)) { + _E("Failed to send message"); + return false; + } + if (!m_evt_channel->read_sync(reply)) { + _E("Failed to receive message"); + return false; + } reply.disclose((char *)&buf, sizeof(buf)); m_id = buf.listener_id; diff --git a/src/client/sensor_listener.h b/src/client/sensor_listener.h index aed8b116..9e662766 100644 --- a/src/client/sensor_listener.h +++ b/src/client/sensor_listener.h @@ -39,6 +39,7 @@ public: sensor_listener(sensor_t sensor, ipc::event_loop *loop); virtual ~sensor_listener(); + bool get_initialized(void); int get_id(void); sensor_t get_sensor(void); @@ -89,6 +90,7 @@ private: void disconnect(void); bool is_connected(void); + bool m_initialized; int m_id; sensor_info *m_sensor; diff --git a/src/shared/channel.cpp b/src/shared/channel.cpp index 26b654c5..e1e99e37 100644 --- a/src/shared/channel.cpp +++ b/src/shared/channel.cpp @@ -301,8 +301,7 @@ bool channel::read_sync(message &msg, bool select) /* header */ size = m_socket->recv(&header, sizeof(message_header), select); - if (size <= 0) - return false; + retvm_if(size <= 0, false, "Failed to receive header"); /* check error from header */ if (m_handler && header.err != 0) { @@ -319,8 +318,7 @@ bool channel::read_sync(message &msg, bool select) if (header.length > 0) { size = m_socket->recv(&buf, header.length, select); - if (size <= 0) - return false; + retvm_if(size <= 0, false, "Failed to receive body"); } buf[header.length] = '\0'; diff --git a/src/shared/socket.cpp b/src/shared/socket.cpp index 6cca9e2a..213b011f 100644 --- a/src/shared/socket.cpp +++ b/src/shared/socket.cpp @@ -85,15 +85,21 @@ static int create_unix_socket(int type) static bool select_fds(int fd, fd_set *read_fds, fd_set *write_fds, const int timeout) { struct timeval tv; - int err; + int fds_num = 0; tv.tv_sec = timeout; tv.tv_usec = 0; while (true) { - err = ::select(fd + 1, read_fds, write_fds, NULL, &tv); - if (err <= 0) + fds_num = ::select(fd + 1, read_fds, write_fds, NULL, &tv); + if (fds_num < 0) { + _ERRNO(errno, _E, "Failed to select[%d]", fds_num); return false; + } + if (fds_num == 0) { + _E("Failed to select(timeout)"); + return false; + } if (read_fds && FD_ISSET(fd, read_fds)) break; @@ -294,7 +300,7 @@ ssize_t socket::send(const void *buffer, size_t size, bool select) const FD_SET(m_sock_fd, &write_fds); if (!select_fds(m_sock_fd, NULL, &write_fds, SOCK_TIMEOUT)) { - _E("Failed to send message(timeout)"); + _E("Failed to send message"); return 0; } } @@ -310,7 +316,7 @@ ssize_t socket::recv(void* buffer, size_t size, bool select) const FD_SET(m_sock_fd, &read_fds); if (!select_fds(m_sock_fd, &read_fds, NULL, SOCK_TIMEOUT)) { - _E("Failed to receive message(timeout)"); + _E("Failed to receive message"); return 0; } }