Remove busy-waiting code
authorSung-jae Park <nicesj.park@samsung.com>
Fri, 14 Sep 2012 01:52:25 +0000 (10:52 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Sat, 15 Sep 2012 02:08:16 +0000 (11:08 +0900)
Change-Id: I791f27f8566012529db08959361d31792efe7c94

src/com-core.c
src/com-core_packet.c
src/secure_socket.c

index 17c36a1..c985ad1 100644 (file)
@@ -327,34 +327,40 @@ EAPI int com_core_recv(int handle, char *buffer, int size, int *sender_pid, doub
        int readsize;
        int ret;
 
+       fd_set set;
+
        readsize = 0;
        while (size > 0) {
+               FD_ZERO(&set);
+               FD_SET(handle, &set);
+
                if (timeout > 0.0f) {
                        struct timeval tv;
-                       fd_set set;
-
-                       FD_ZERO(&set);
-                       FD_SET(handle, &set);
 
                        tv.tv_sec = (unsigned long)timeout;
                        tv.tv_usec = (timeout - (unsigned long)timeout) * 1000000u;
-
                        ret = select(handle + 1, &set, NULL, NULL, &tv);
-                       if (ret < 0) {
-                               /*!< Error */
-                               ret = -errno;
-                               ErrPrint("Error: %s\n", strerror(errno));
-                               return ret;
-                       } else if (ret == 0) {
-                               /*!< Timeout */
-                               ErrPrint("Timeout expired\n");
-                               return -ETIMEDOUT;
-                       }
+               } else if (timeout == 0.0f) {
+                       ret = select(handle + 1, &set, NULL, NULL, NULL);
+               } else {
+                       ErrPrint("Invalid timeout: %lf (it must be greater than 0.0)\n", timeout);
+                       return -EINVAL;
+               }
 
-                       if (!FD_ISSET(handle, &set)) {
-                               ErrPrint("Unexpected handle is toggled\n");
-                               return -EINVAL;
-                       }
+               if (ret < 0) {
+                       /*!< Error */
+                       ret = -errno;
+                       ErrPrint("Error: %s\n", strerror(errno));
+                       return ret;
+               } else if (ret == 0) {
+                       /*!< Timeout */
+                       ErrPrint("Timeout expired\n");
+                       return -ETIMEDOUT;
+               }
+
+               if (!FD_ISSET(handle, &set)) {
+                       ErrPrint("Unexpected handle is toggled\n");
+                       return -EINVAL;
                }
 
                ret = secure_socket_recv(handle, buffer + readsize, size, sender_pid);
@@ -380,32 +386,40 @@ EAPI int com_core_send(int handle, const char *buffer, int size, double timeout)
        int writesize;
        int ret;
 
+       fd_set set;
+
        writesize = 0;
        while (size > 0) {
+
+               FD_ZERO(&set);
+               FD_SET(handle, &set);
+
                if (timeout > 0.0f) {
                        struct timeval tv;
-                       fd_set set;
-
-                       FD_ZERO(&set);
-                       FD_SET(handle, &set);
 
                        tv.tv_sec = (unsigned long)timeout;
                        tv.tv_usec = (timeout - (unsigned long)timeout) * 1000000u;
 
                        ret = select(handle + 1, NULL, &set, NULL, &tv);
-                       if (ret < 0) {
-                               ret = -errno;
-                               ErrPrint("Error: %s\n", strerror(errno));
-                               return ret;
-                       } else if (ret == 0) {
-                               ErrPrint("Timeout expired\n");
-                               return -ETIMEDOUT;
-                       }
+               } else if (timeout == 0.0f) {
+                       ret = select(handle + 1, NULL, &set, NULL, NULL);
+               } else {
+                       ErrPrint("Invalid timeout: %lf (it must be greater than 0.0)\n", timeout);
+                       return -EINVAL;
+               }
 
-                       if (!FD_ISSET(handle, &set)) {
-                               ErrPrint("Unexpected handle is toggled\n");
-                               return -EINVAL;
-                       }
+               if (ret < 0) {
+                       ret = -errno;
+                       ErrPrint("Error: %s\n", strerror(errno));
+                       return ret;
+               } else if (ret == 0) {
+                       ErrPrint("Timeout expired\n");
+                       return -ETIMEDOUT;
+               }
+
+               if (!FD_ISSET(handle, &set)) {
+                       ErrPrint("Unexpected handle is toggled\n");
+                       return -EINVAL;
                }
 
                ret = secure_socket_send(handle, buffer + writesize, size);
index 52ff6f1..adfa206 100644 (file)
@@ -410,7 +410,7 @@ EAPI int com_core_packet_send_only(int handle, struct packet *packet)
        int ret;
 
        if (packet_type(packet) != PACKET_REQ_NOACK) {
-               ErrPrint("Invalid type - should be PACKET_REQ_NOACK\n");
+               ErrPrint("Invalid type - should be PACKET_REQ_NOACK (%p)\n", packet);
                return -EINVAL;
        }
 
index 382b081..ff8dd07 100644 (file)
@@ -82,14 +82,14 @@ EAPI int secure_socket_create_client(const char *peer)
                if (close(handle) < 0)
                        ErrPrint("close a handle: %s\n", strerror(errno));
 
-               return -1;
+               return -ENOTCONN;
        }
 
        if (setsockopt(handle, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)) < 0) {
                ErrPrint("Failed to change sock opt : %s\n", strerror(errno));
                if (close(handle) < 0)
                        ErrPrint("close a handle: %s\n", strerror(errno));
-               return -1;
+               return -EFAULT;
        }
 
        return handle;
@@ -107,21 +107,24 @@ EAPI int secure_socket_create_server(const char *peer)
 
        state = bind(handle, &addr, sizeof(addr));
        if (state < 0) {
+               state = -errno;
+
                ErrPrint("Failed to bind a socket %s\n", strerror(errno));
                if (close(handle) < 0)
                        ErrPrint("Close a handle : %s\n", strerror(errno));
 
-               return -1;
+               return state;
        }
 
        state = listen(handle, BACKLOG);
        if (state < 0) {
+               state = -errno;
                ErrPrint("Failed to listen a socket %s\n", strerror(errno));
 
                if (close(handle) < 0)
                        ErrPrint("Close a handle : %s\n", strerror(errno));
 
-               return -1;
+               return state;
        }
 
        if (chmod(peer, 0666) < 0)
@@ -140,15 +143,18 @@ EAPI int secure_socket_get_connection_handle(int server_handle)
 
        handle = accept(server_handle, (struct sockaddr *)&addr, &size);
        if (handle < 0) {
+               handle = -errno;
                ErrPrint("Failed to accept a new client %s\n", strerror(errno));
-               return -1;
+               return handle;
        }
 
        if (setsockopt(handle, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)) < 0) {
+               int ret;
+               ret = -errno;
                ErrPrint("Failed to change sock opt : %s\n", strerror(errno));
                if (close(handle) < 0)
                        ErrPrint("Close a handle: %s\n", strerror(errno));
-               return -1;
+               return ret;
        }
 
        return handle;