Give the NTLM SSO helper a moment to cleanly shut down if needed
authorDan Fandrich <dan@coneharvesters.com>
Thu, 28 Jul 2011 19:27:55 +0000 (12:27 -0700)
committerDan Fandrich <dan@coneharvesters.com>
Thu, 28 Jul 2011 19:42:39 +0000 (12:42 -0700)
lib/http_ntlm.c
lib/select.c
lib/select.h

index 79481a4..4163b82 100644 (file)
@@ -51,6 +51,7 @@
 #include "urldata.h"
 #include "non-ascii.h"  /* for Curl_convert_... prototypes */
 #include "sendf.h"
+#include "select.h"
 #include "rawstr.h"
 #include "curl_base64.h"
 #include "http_ntlm.h"
@@ -694,10 +695,14 @@ static void sso_ntlm_close(struct connectdata *conn)
       case 0:
         kill(conn->pid, SIGTERM);
         break;
+      case 1:
+        /* Give the process another moment to shut down cleanly before
+           bringing down the axe */
+        Curl_wait_ms(1);
+        break;
       case 2:
         kill(conn->pid, SIGKILL);
         break;
-      case 1:
       case 3:
         break;
       }
index c566c60..56dbc44 100644 (file)
@@ -90,7 +90,7 @@
  *   -1 = system call error, invalid timeout value, or interrupted
  *    0 = specified timeout has elapsed
  */
-static int wait_ms(int timeout_ms)
+int Curl_wait_ms(int timeout_ms)
 {
 #if !defined(MSDOS) && !defined(USE_WINSOCK)
 #ifndef HAVE_POLL_FINE
@@ -177,7 +177,7 @@ int Curl_socket_ready(curl_socket_t readfd, curl_socket_t writefd,
   int ret;
 
   if((readfd == CURL_SOCKET_BAD) && (writefd == CURL_SOCKET_BAD)) {
-    r = wait_ms((int)timeout_ms);
+    r = Curl_wait_ms((int)timeout_ms);
     return r;
   }
 
@@ -361,7 +361,7 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
     }
   }
   if(fds_none) {
-    r = wait_ms((int)timeout_ms);
+    r = Curl_wait_ms(timeout_ms);
     return r;
   }
 
index e012c63..d785fb3 100644 (file)
@@ -89,6 +89,8 @@ int Curl_socket_ready(curl_socket_t readfd, curl_socket_t writefd,
 
 int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms);
 
+int Curl_wait_ms(int timeout_ms);
+
 #ifdef TPF
 int tpf_select_libcurl(int maxfds, fd_set* reads, fd_set* writes,
                        fd_set* excepts, struct timeval* tv);