Add logs and error handling codes for sensor listener 34/311034/1
authorSangYoun Kwak <sy.kwak@samsung.com>
Thu, 9 May 2024 08:23:30 +0000 (17:23 +0900)
committerSangYoun Kwak <sy.kwak@samsung.com>
Mon, 13 May 2024 07:40:06 +0000 (16:40 +0900)
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 <sy.kwak@samsung.com>
src/client/sensor_internal.cpp
src/client/sensor_listener.cpp
src/client/sensor_listener.h
src/shared/channel.cpp
src/shared/socket.cpp

index f7a7674d34f944f5f3a8a15e5eadd00317d2faae..7495933d33b31dc36366b10286a8c8fa1dd78643 100644 (file)
@@ -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;
 
index 7c3ab4b2e58eaf23043ed724645dd464749668f7..1b8741b3b8bebfe7d49fdc2d2d418a82b5224de5 100644 (file)
@@ -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_info *>(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_info *>(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;
index aed8b116204c5aa1af2a990e6578c383c8039ef9..9e6627660f988a80f53d46fe850e68b128c553f5 100644 (file)
@@ -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;
 
index 26b654c54ea233b280cb7dc2c97f7381d580484e..e1e99e37ef55f0b645266295b89f4c5ce2aeb9db 100644 (file)
@@ -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';
index 6cca9e2ae4be409154c8f2cf10bffef963f8a3db..213b011f3ef5625ef2df04c0168f60411057c243 100644 (file)
@@ -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;
                }
        }