fix out of memory handling issue
authorYang Tse <yangsita@gmail.com>
Sun, 8 Apr 2007 22:49:38 +0000 (22:49 +0000)
committerYang Tse <yangsita@gmail.com>
Sun, 8 Apr 2007 22:49:38 +0000 (22:49 +0000)
lib/easy.c
lib/url.c

index 6195d21..939966d 100644 (file)
@@ -397,7 +397,10 @@ CURLcode curl_easy_perform(CURL *easy)
   mcode = curl_multi_add_handle(multi, easy);
   if(mcode) {
     curl_multi_cleanup(multi);
-    return CURLE_FAILED_INIT;
+    if(mcode == CURLM_OUT_OF_MEMORY)
+      return CURLE_OUT_OF_MEMORY;
+    else
+      return CURLE_FAILED_INIT;
   }
 
   /* we start some action by calling perform right away */
index edbd115..3b6e566 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -501,6 +501,9 @@ CURLcode Curl_open(struct SessionHandle **curl)
 {
   CURLcode res = CURLE_OK;
   struct SessionHandle *data;
+#ifdef USE_ARES
+  int status;
+#endif
 
   /* Very simple start-up: alloc the struct, init it with zeroes and return */
   data = (struct SessionHandle *)calloc(1, sizeof(struct SessionHandle));
@@ -513,10 +516,13 @@ CURLcode Curl_open(struct SessionHandle **curl)
   data->magic = CURLEASY_MAGIC_NUMBER;
 
 #ifdef USE_ARES
-  if(ARES_SUCCESS != ares_init(&data->state.areschannel)) {
+  if ((status = ares_init(&data->state.areschannel)) != ARES_SUCCESS) {
     DEBUGF(fprintf(stderr, "Error: ares_init failed\n"));
     free(data);
-    return CURLE_FAILED_INIT;
+    if (status == ARES_ENOMEM)
+      return CURLE_OUT_OF_MEMORY;
+    else
+      return CURLE_FAILED_INIT;
   }
   /* make sure that all other returns from this function should destroy the
      ares channel before returning error! */