sensord: add select() before read a data to check whether it is ready or not 25/132725/2
authorkibak.yoon <kibak.yoon@samsung.com>
Wed, 7 Jun 2017 08:38:06 +0000 (17:38 +0900)
committerkibak.yoon <kibak.yoon@samsung.com>
Wed, 7 Jun 2017 10:42:27 +0000 (19:42 +0900)
Change-Id: Id39cffc0107771dcdec0f7d23da6b36f39af0fbe
Signed-off-by: kibak.yoon <kibak.yoon@samsung.com>
src/shared/channel.cpp
src/shared/channel.h
src/shared/channel_event_handler.cpp
src/shared/socket.cpp

index 8549f1e..e407aee 100644 (file)
@@ -77,7 +77,7 @@ public:
                if (condition & (EVENT_OUT | EVENT_HUP))
                        return false;
 
-               if (!m_ch->read_sync(msg))
+               if (!m_ch->read_sync(msg, false))
                        return false;
 
                return false;
@@ -202,14 +202,14 @@ bool channel::read(void)
        return true;
 }
 
-bool channel::read_sync(message &msg)
+bool channel::read_sync(message &msg, bool select)
 {
        message_header header;
        ssize_t size = 0;
        char buf[MAX_MSG_CAPACITY];
 
        /* header */
-       size = m_socket->recv(&header, sizeof(message_header), true);
+       size = m_socket->recv(&header, sizeof(message_header), select);
        retv_if(size <= 0, false);
 
        /* check error from header */
@@ -221,7 +221,7 @@ bool channel::read_sync(message &msg)
 
        /* body */
        if (header.length > 0) {
-               size = m_socket->recv(&buf, header.length, true);
+               size = m_socket->recv(&buf, header.length, select);
                retv_if(size <= 0, false);
        }
 
index db709b6..f8c525c 100644 (file)
@@ -51,7 +51,7 @@ public:
        bool send_sync(message *msg);
 
        bool read(void);
-       bool read_sync(message &msg);
+       bool read_sync(message &msg, bool select = true);
 
        bool get_option(int type, int &value) const;
        bool set_option(int type, int value);
index 9045a88..6ca1e25 100644 (file)
@@ -51,7 +51,7 @@ bool channel_event_handler::handle(int fd, event_condition condition)
                return false;
        }
 
-       if (!m_ch->read_sync(msg)) {
+       if (!m_ch->read_sync(msg, false)) {
                m_ch->disconnect();
                delete m_ch;
                m_ch = NULL;
index 871031f..f053dbc 100644 (file)
@@ -310,7 +310,18 @@ ssize_t socket::send(const void *buffer, size_t size, bool select) const
 
 ssize_t socket::recv(void* buffer, size_t size, bool select) const
 {
-       /* WARNING: if select() is called here, it affects performance */
+       if (select) {
+               const int TIMEOUT = 1;
+               fd_set read_fds;
+               FD_ZERO(&read_fds);
+               FD_SET(m_sock_fd, &read_fds);
+
+               if (!select_fds(m_sock_fd, &read_fds, NULL, TIMEOUT)) {
+                       _E("Failed to receive message(timeout)");
+                       return 0;
+               }
+       }
+
        return on_recv(buffer, size);
 }