clean up properly on failure to enable easier libcurl leak detection
authorDaniel Stenberg <daniel@haxx.se>
Fri, 14 May 2004 09:22:12 +0000 (09:22 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 14 May 2004 09:22:12 +0000 (09:22 +0000)
tests/libtest/lib503.c
tests/libtest/lib504.c
tests/libtest/lib505.c
tests/libtest/lib506.c
tests/libtest/lib507.c

index e2bd42145f98dcdfe835e03e6be24f46f43a2a3b..59cf4e6552a43bd34a503f6f1609fb1c21d2512a 100644 (file)
@@ -54,7 +54,7 @@ int test(char *URL)
       
       if (res != CURLM_OK) {
         fprintf(stderr, "not okay???\n");
-        return 80;
+        break;
       }
 
       FD_ZERO(&rd);
index 5f2c6acfc63e8f30bb8ae84bc250997748a1527c..df2e3ff2c121ec9498b527987316a53f6d03c0fa 100644 (file)
@@ -35,53 +35,55 @@ int test(char *URL)
 
   res = curl_multi_add_handle(m, c);
   if(res && (res != CURLM_CALL_MULTI_PERFORM))
-    return 1; /* major failure */
-  do {
-    struct timeval interval;
+    ; /* major failure */
+  else {
+    do {
+      struct timeval interval;
 
-    interval.tv_sec = 1;
-    interval.tv_usec = 0;
+      interval.tv_sec = 1;
+      interval.tv_usec = 0;
 
-    fprintf(stderr, "curl_multi_perform()\n");
+      fprintf(stderr, "curl_multi_perform()\n");
     
-    do {
-      res = curl_multi_perform(m, &running);
-    } while (res == CURLM_CALL_MULTI_PERFORM);
-    if(!running) {
-      /* This is where this code is expected to reach */
-      int numleft;
-      CURLMsg *msg = curl_multi_info_read(m, &numleft);
-      fprintf(stderr, "Expected: not running\n");
-      if(msg && !numleft)
-        ret = 100; /* this is where we should be */
-      else
-        ret = 99; /* not correct */
-      break;
-    }
-    fprintf(stderr, "running == %d, res == %d\n", running, res);
+      do {
+        res = curl_multi_perform(m, &running);
+      } while (res == CURLM_CALL_MULTI_PERFORM);
+      if(!running) {
+        /* This is where this code is expected to reach */
+        int numleft;
+        CURLMsg *msg = curl_multi_info_read(m, &numleft);
+        fprintf(stderr, "Expected: not running\n");
+        if(msg && !numleft)
+          ret = 100; /* this is where we should be */
+        else
+          ret = 99; /* not correct */
+        break;
+      }
+      fprintf(stderr, "running == %d, res == %d\n", running, res);
 
-    if (res != CURLM_OK) {
-      ret = 2;
-      break;
-    }
+      if (res != CURLM_OK) {
+        ret = 2;
+        break;
+      }
 
-    FD_ZERO(&rd);
-    FD_ZERO(&wr);
-    FD_ZERO(&exc);
-    max_fd = 0;
+      FD_ZERO(&rd);
+      FD_ZERO(&wr);
+      FD_ZERO(&exc);
+      max_fd = 0;
 
-    fprintf(stderr, "curl_multi_fdset()\n");
-    if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) {
-      fprintf(stderr, "unexpected failured of fdset.\n");
-      ret = 3;
-      break;
-    }
-    rc = select(max_fd+1, &rd, &wr, &exc, &interval);
-    fprintf(stderr, "select returned %d\n", rc);
+      fprintf(stderr, "curl_multi_fdset()\n");
+      if (curl_multi_fdset(m, &rd, &wr, &exc, &max_fd) != CURLM_OK) {
+        fprintf(stderr, "unexpected failured of fdset.\n");
+        ret = 3;
+        break;
+      }
+      rc = select(max_fd+1, &rd, &wr, &exc, &interval);
+      fprintf(stderr, "select returned %d\n", rc);
     
-    /* we only allow a certain number of loops to avoid hanging here
-       forever */
-  } while(rc && (--loop>0));
+      /* we only allow a certain number of loops to avoid hanging here
+         forever */
+    } while(rc && (--loop>0));
+  }
 
   curl_multi_remove_handle(m, c);
   curl_easy_cleanup(c);
index 131df7856c9c8293e6866517be3f545c9e076b22..62c7b6880f3f5b43915d9012b22fcaaa0512bd67 100644 (file)
@@ -72,9 +72,14 @@ int test(char *URL)
   /* get a curl handle */
   curl = curl_easy_init();
   if(curl) {
+    struct curl_slist *hl;
     /* build a list of commands to pass to libcurl */
-    headerlist = curl_slist_append(headerlist, buf_1);
-    headerlist = curl_slist_append(headerlist, buf_2);
+    hl = curl_slist_append(headerlist, buf_1);
+    if(hl) {
+      headerlist = curl_slist_append(hl, buf_2);
+      if(hl)
+        headerlist = hl;
+    }
 
     /* enable uploading */
     curl_easy_setopt(curl, CURLOPT_UPLOAD, TRUE) ;
index 22f5d06981d4536a8f6c48dc7d29b7f0eaac0798..52a4094a2c7e8bb0829f1d77710f7a783f84e895 100644 (file)
@@ -148,13 +148,19 @@ int test(char *URL)
   /* prepare share */
   printf( "SHARE_INIT\n" );
   share = curl_share_init();
-  curl_share_setopt( share, CURLSHOPT_LOCKFUNC,   lock);
-  curl_share_setopt( share, CURLSHOPT_UNLOCKFUNC, unlock);
-  curl_share_setopt( share, CURLSHOPT_USERDATA,   &user);
+  scode = curl_share_setopt( share, CURLSHOPT_LOCKFUNC, lock);
+  scode += curl_share_setopt( share, CURLSHOPT_UNLOCKFUNC, unlock);
+  scode += curl_share_setopt( share, CURLSHOPT_USERDATA, &user);
   printf( "CURL_LOCK_DATA_COOKIE\n" );
-  curl_share_setopt( share, CURLSHOPT_SHARE,      CURL_LOCK_DATA_COOKIE);
+  scode += curl_share_setopt( share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
   printf( "CURL_LOCK_DATA_DNS\n" );
-  curl_share_setopt( share, CURLSHOPT_SHARE,      CURL_LOCK_DATA_DNS);
+  scode += curl_share_setopt( share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
+
+  if(scode) {
+    curl_share_cleanup(share);
+    return 2;
+  }
+
   
   res = 0;
 
index f45169496f5814cada7b47bfe1391495a5eb6771..b16c23368a50e20cf5627edda0165c1402a57bc1 100644 (file)
@@ -39,9 +39,10 @@ int test(char *URL)
     }
   }
   msg = curl_multi_info_read(multi, &still_running);
-  /* this should now contain a result code from the easy handle,
-     get it */
-  i = msg->data.result;
+  if(msg)
+    /* this should now contain a result code from the easy handle,
+       get it */
+    i = msg->data.result;
 
   curl_multi_cleanup(multi);
   curl_easy_cleanup(curls);