mirror of
https://github.com/moparisthebest/curl
synced 2025-02-28 09:21:50 -05:00
url: make Curl_close() NULLify the pointer too
This is the common pattern used in the code and by a unified approach we avoid mistakes. Closes #4534
This commit is contained in:
parent
4011802b35
commit
dcd7e37c3a
@ -143,10 +143,8 @@ int Curl_conncache_init(struct conncache *connc, int size)
|
||||
|
||||
rc = Curl_hash_init(&connc->hash, size, Curl_hash_str,
|
||||
Curl_str_key_compare, free_bundle_hash_entry);
|
||||
if(rc) {
|
||||
Curl_close(connc->closure_handle);
|
||||
connc->closure_handle = NULL;
|
||||
}
|
||||
if(rc)
|
||||
Curl_close(&connc->closure_handle);
|
||||
else
|
||||
connc->closure_handle->state.conn_cache = connc;
|
||||
|
||||
@ -595,7 +593,7 @@ void Curl_conncache_close_all_connections(struct conncache *connc)
|
||||
|
||||
Curl_hostcache_clean(connc->closure_handle,
|
||||
connc->closure_handle->dns.hostcache);
|
||||
Curl_close(connc->closure_handle);
|
||||
Curl_close(&connc->closure_handle);
|
||||
sigpipe_restore(&pipe_st);
|
||||
}
|
||||
}
|
||||
|
14
lib/doh.c
14
lib/doh.c
@ -346,7 +346,7 @@ static CURLcode dohprobe(struct Curl_easy *data,
|
||||
|
||||
error:
|
||||
free(nurl);
|
||||
Curl_close(doh);
|
||||
Curl_close(&doh);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -402,10 +402,8 @@ Curl_addrinfo *Curl_doh(struct connectdata *conn,
|
||||
error:
|
||||
curl_slist_free_all(data->req.doh.headers);
|
||||
data->req.doh.headers = NULL;
|
||||
Curl_close(data->req.doh.probe[0].easy);
|
||||
data->req.doh.probe[0].easy = NULL;
|
||||
Curl_close(data->req.doh.probe[1].easy);
|
||||
data->req.doh.probe[1].easy = NULL;
|
||||
Curl_close(&data->req.doh.probe[0].easy);
|
||||
Curl_close(&data->req.doh.probe[1].easy);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -925,11 +923,9 @@ CURLcode Curl_doh_is_resolved(struct connectdata *conn,
|
||||
struct dohentry de;
|
||||
/* remove DOH handles from multi handle and close them */
|
||||
curl_multi_remove_handle(data->multi, data->req.doh.probe[0].easy);
|
||||
Curl_close(data->req.doh.probe[0].easy);
|
||||
data->req.doh.probe[0].easy = NULL;
|
||||
Curl_close(&data->req.doh.probe[0].easy);
|
||||
curl_multi_remove_handle(data->multi, data->req.doh.probe[1].easy);
|
||||
Curl_close(data->req.doh.probe[1].easy);
|
||||
data->req.doh.probe[1].easy = NULL;
|
||||
Curl_close(&data->req.doh.probe[1].easy);
|
||||
/* parse the responses, create the struct and return it! */
|
||||
init_dohentry(&de);
|
||||
rc = doh_decode(data->req.doh.probe[0].serverdoh.memory,
|
||||
|
@ -731,7 +731,7 @@ void curl_easy_cleanup(struct Curl_easy *data)
|
||||
return;
|
||||
|
||||
sigpipe_ignore(data, &pipe_st);
|
||||
Curl_close(data);
|
||||
Curl_close(&data);
|
||||
sigpipe_restore(&pipe_st);
|
||||
}
|
||||
|
||||
|
12
lib/http2.c
12
lib/http2.c
@ -496,16 +496,14 @@ static struct Curl_easy *duphandle(struct Curl_easy *data)
|
||||
/* setup the request struct */
|
||||
struct HTTP *http = calloc(1, sizeof(struct HTTP));
|
||||
if(!http) {
|
||||
(void)Curl_close(second);
|
||||
second = NULL;
|
||||
(void)Curl_close(&second);
|
||||
}
|
||||
else {
|
||||
second->req.protop = http;
|
||||
http->header_recvbuf = Curl_add_buffer_init();
|
||||
if(!http->header_recvbuf) {
|
||||
free(http);
|
||||
(void)Curl_close(second);
|
||||
second = NULL;
|
||||
(void)Curl_close(&second);
|
||||
}
|
||||
else {
|
||||
Curl_http2_setup_req(second);
|
||||
@ -547,7 +545,7 @@ static int push_promise(struct Curl_easy *data,
|
||||
stream = data->req.protop;
|
||||
if(!stream) {
|
||||
failf(data, "Internal NULL stream!\n");
|
||||
(void)Curl_close(newhandle);
|
||||
(void)Curl_close(&newhandle);
|
||||
rv = 1;
|
||||
goto fail;
|
||||
}
|
||||
@ -569,7 +567,7 @@ static int push_promise(struct Curl_easy *data,
|
||||
/* denied, kill off the new handle again */
|
||||
http2_stream_free(newhandle->req.protop);
|
||||
newhandle->req.protop = NULL;
|
||||
(void)Curl_close(newhandle);
|
||||
(void)Curl_close(&newhandle);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@ -585,7 +583,7 @@ static int push_promise(struct Curl_easy *data,
|
||||
infof(data, "failed to add handle to multi\n");
|
||||
http2_stream_free(newhandle->req.protop);
|
||||
newhandle->req.protop = NULL;
|
||||
Curl_close(newhandle);
|
||||
Curl_close(&newhandle);
|
||||
rv = 1;
|
||||
goto fail;
|
||||
}
|
||||
|
14
lib/url.c
14
lib/url.c
@ -317,13 +317,17 @@ static void up_free(struct Curl_easy *data)
|
||||
* when curl_easy_perform() is invoked.
|
||||
*/
|
||||
|
||||
CURLcode Curl_close(struct Curl_easy *data)
|
||||
CURLcode Curl_close(struct Curl_easy **datap)
|
||||
{
|
||||
struct Curl_multi *m;
|
||||
struct Curl_easy *data;
|
||||
|
||||
if(!data)
|
||||
if(!datap || !*datap)
|
||||
return CURLE_OK;
|
||||
|
||||
data = *datap;
|
||||
*datap = NULL;
|
||||
|
||||
Curl_expire_clear(data); /* shut off timers */
|
||||
|
||||
m = data->multi;
|
||||
@ -1983,10 +1987,8 @@ void Curl_free_request_state(struct Curl_easy *data)
|
||||
{
|
||||
Curl_safefree(data->req.protop);
|
||||
Curl_safefree(data->req.newurl);
|
||||
Curl_close(data->req.doh.probe[0].easy);
|
||||
data->req.doh.probe[0].easy = NULL;
|
||||
Curl_close(data->req.doh.probe[1].easy);
|
||||
data->req.doh.probe[1].easy = NULL;
|
||||
Curl_close(&data->req.doh.probe[0].easy);
|
||||
Curl_close(&data->req.doh.probe[1].easy);
|
||||
}
|
||||
|
||||
|
||||
|
@ -49,7 +49,7 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data);
|
||||
|
||||
void Curl_freeset(struct Curl_easy * data);
|
||||
CURLcode Curl_uc_to_curlcode(CURLUcode uc);
|
||||
CURLcode Curl_close(struct Curl_easy *data); /* opposite of curl_open() */
|
||||
CURLcode Curl_close(struct Curl_easy **datap); /* opposite of curl_open() */
|
||||
CURLcode Curl_connect(struct Curl_easy *, bool *async, bool *protocol_connect);
|
||||
CURLcode Curl_disconnect(struct Curl_easy *data,
|
||||
struct connectdata *, bool dead_connection);
|
||||
|
@ -5,7 +5,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
@ -83,7 +83,7 @@ UNITTEST_START
|
||||
|
||||
Curl_free_request_state(empty);
|
||||
|
||||
rc = Curl_close(empty);
|
||||
rc = Curl_close(&empty);
|
||||
fail_unless(rc == CURLE_OK, "Curl_close() failed");
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user