Add logs and error handling codes for sensor listener 94/310894/1
authorSangYoun Kwak <sy.kwak@samsung.com>
Thu, 9 May 2024 08:23:30 +0000 (17:23 +0900)
committerSangYoun Kwak <sy.kwak@samsung.com>
Thu, 9 May 2024 08:28:37 +0000 (17:28 +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 1930b29330bdb25cf46989283eafbc60b986827e..a3577c253047ef6ee5edef8b95a23dde7002323f 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 6d11076914172b02b0dc84c4f91cae570116efbc..930992ea8dabc4ca104db395358c7afbf8c989a5 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;
                }
        }