Author: mturk
Date: Fri Sep 17 13:26:58 2010
New Revision: 998120

URL: http://svn.apache.org/viewvc?rev=998120&view=rev
Log:
Make sure errno survives JK_TRACE_EXIT call

Modified:
    tomcat/jk/trunk/native/common/jk_connect.c

Modified: tomcat/jk/trunk/native/common/jk_connect.c
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_connect.c?rev=998120&r1=998119&r2=998120&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_connect.c (original)
+++ tomcat/jk/trunk/native/common/jk_connect.c Fri Sep 17 13:26:58 2010
@@ -730,8 +730,8 @@ int jk_shutdown_socket(jk_sock_t sd, jk_
         rc = jk_close_socket(sd, l);
         if (JK_IS_DEBUG_LEVEL(l))
             jk_log(l, JK_LOG_DEBUG, "Failed sending SHUT_WR for socket %d", 
sd);
-        errno = save_errno;
         JK_TRACE_EXIT(l);
+        errno = save_errno;
         return rc;
     }
 
@@ -801,8 +801,8 @@ int jk_shutdown_socket(jk_sock_t sd, jk_
         jk_log(l, JK_LOG_DEBUG,
                "Shutdown socket %d and read %d lingering bytes in %d sec.",
                sd, rd, (int)difftime(time(NULL), start));
-    errno = save_errno;
     JK_TRACE_EXIT(l);
+    errno = save_errno;
     return rc;
 }
 
@@ -842,8 +842,9 @@ int jk_tcp_socket_sendfull(jk_sock_t sd,
 
         if (JK_IS_SOCKET_ERROR(wr)) {
             jk_shutdown_socket(sd, l);
+            int err = (errno > 0) ? -errno : errno;
             JK_TRACE_EXIT(l);
-            return (errno > 0) ? -errno : errno;
+            return err;
         }
         else if (wr == 0) {
             jk_shutdown_socket(sd, l);
@@ -890,10 +891,10 @@ int jk_tcp_socket_recvfull(jk_sock_t sd,
         } while (JK_IS_SOCKET_ERROR(rd) && errno == EINTR);
 
         if (JK_IS_SOCKET_ERROR(rd)) {
-            rd = (errno > 0) ? -errno : errno;
+            int err = (errno > 0) ? -errno : errno;
             jk_shutdown_socket(sd, l);
             JK_TRACE_EXIT(l);
-            return (rd == 0) ? JK_SOCKET_EOF : rd;
+            return (err == 0) ? JK_SOCKET_EOF : err;
         }
         else if (rd == 0) {
             jk_shutdown_socket(sd, l);
@@ -985,8 +986,8 @@ int jk_is_input_event(jk_sock_t sd, int 
                    sd, timeout);
         }
         /* Timeout. Set the errno to timeout */
-        errno = ETIMEDOUT;
         JK_TRACE_EXIT(l);
+        errno = ETIMEDOUT;
         return JK_FALSE;
     }
     else if (rc < 0) {
@@ -995,8 +996,8 @@ int jk_is_input_event(jk_sock_t sd, int 
             jk_log(l, JK_LOG_DEBUG,
                    "error during poll on socket %d (errno=%d)", sd, errno);
         }
-        errno = save_errno;
         JK_TRACE_EXIT(l);
+        errno = save_errno;
         return JK_FALSE;
     }
     if ((fds.revents & (POLLERR | POLLHUP))) {
@@ -1006,12 +1007,12 @@ int jk_is_input_event(jk_sock_t sd, int 
                    "error event during poll on socket %d (event=%d)",
                sd, save_errno);
         }
-        errno = save_errno;
         JK_TRACE_EXIT(l);
+        errno = save_errno;
         return JK_FALSE;
     }
-    errno = 0;
     JK_TRACE_EXIT(l);
+    errno = 0;
     return JK_TRUE;
 }
 #else
@@ -1040,13 +1041,13 @@ int jk_is_input_event(jk_sock_t sd, int 
                    "timeout during select on socket %d (timeout=%d)",
                    sd, timeout);
         }
+        JK_TRACE_EXIT(l);
         /* Timeout. Set the errno to timeout */
 #if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
         errno = WSAETIMEDOUT - WSABASEERR;
 #else
         errno = ETIMEDOUT;
 #endif
-        JK_TRACE_EXIT(l);
         return JK_FALSE;
     }
     else if (rc < 0) {
@@ -1056,12 +1057,12 @@ int jk_is_input_event(jk_sock_t sd, int 
                    "error during select on socket %d (errno=%d)",
                    sd, errno);
         }
-        errno = save_errno;
         JK_TRACE_EXIT(l);
+        errno = save_errno;
         return JK_FALSE;
     }
-    errno = 0;
     JK_TRACE_EXIT(l);
+    errno = 0;
     return JK_TRUE;
 }
 #endif



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to