]> granicus.if.org Git - curl/commitdiff
asyn-thread: Improved cleanup after OOM situations
authorDan Fandrich <dan@coneharvesters.com>
Mon, 28 Aug 2017 21:43:36 +0000 (23:43 +0200)
committerDan Fandrich <dan@coneharvesters.com>
Mon, 28 Aug 2017 21:55:55 +0000 (23:55 +0200)
lib/asyn-thread.c

index fa47f554a317009c2f46b4be65b81f2e50c9aaa0..c9f4431675d8c11274cf9cf02285729c4e11d7bd 100644 (file)
@@ -384,7 +384,7 @@ static bool init_resolve_thread(struct connectdata *conn,
 
   conn->async.os_specific = (void *)td;
   if(!td)
-    goto err_exit;
+    goto errno_exit;
 
   conn->async.port = port;
   conn->async.done = FALSE;
@@ -392,8 +392,11 @@ static bool init_resolve_thread(struct connectdata *conn,
   conn->async.dns = NULL;
   td->thread_hnd = curl_thread_t_null;
 
-  if(!init_thread_sync_data(td, hostname, port, hints))
-    goto err_exit;
+  if(!init_thread_sync_data(td, hostname, port, hints)) {
+    conn->async.os_specific = NULL;
+    free(td);
+    goto errno_exit;
+  }
 
   free(conn->async.hostname);
   conn->async.hostname = strdup(hostname);
@@ -416,6 +419,7 @@ static bool init_resolve_thread(struct connectdata *conn,
  err_exit:
   destroy_async_data(&conn->async);
 
+ errno_exit:
   errno = err;
   return FALSE;
 }