mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 12:23:32 +01:00
Fix a memory leak in summarizing directory request timing.
Spotted by Coverity Scan.
This commit is contained in:
parent
daa0326aaa
commit
d4a75a222f
@ -743,7 +743,8 @@ geoip_get_dirreq_history(geoip_client_action_t action,
|
|||||||
&ent->completion_time);
|
&ent->completion_time);
|
||||||
if (time_diff == 0)
|
if (time_diff == 0)
|
||||||
time_diff = 1; /* Avoid DIV/0; "instant" answers are impossible
|
time_diff = 1; /* Avoid DIV/0; "instant" answers are impossible
|
||||||
* anyway by law of nature or something.. */
|
* by law of nature or something, but a milisecond
|
||||||
|
* is a bit greater than "instantly" */
|
||||||
*bytes_per_second = 1000 * ent->response_size / time_diff;
|
*bytes_per_second = 1000 * ent->response_size / time_diff;
|
||||||
smartlist_add(dirreq_times, bytes_per_second);
|
smartlist_add(dirreq_times, bytes_per_second);
|
||||||
complete++;
|
complete++;
|
||||||
@ -767,8 +768,11 @@ geoip_get_dirreq_history(geoip_client_action_t action,
|
|||||||
result = tor_malloc_zero(bufsize);
|
result = tor_malloc_zero(bufsize);
|
||||||
written = tor_snprintf(result, bufsize, "complete=%u,timeout=%u,"
|
written = tor_snprintf(result, bufsize, "complete=%u,timeout=%u,"
|
||||||
"running=%u", complete, timeouts, running);
|
"running=%u", complete, timeouts, running);
|
||||||
if (written < 0)
|
if (written < 0) {
|
||||||
|
SMARTLIST_FOREACH(dirreq_times, uint32_t *, dlt, tor_free(dlt));
|
||||||
|
smartlist_free(dirreq_times);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
#define MIN_DIR_REQ_RESPONSES 16
|
#define MIN_DIR_REQ_RESPONSES 16
|
||||||
if (complete >= MIN_DIR_REQ_RESPONSES) {
|
if (complete >= MIN_DIR_REQ_RESPONSES) {
|
||||||
uint32_t *dltimes = tor_malloc(sizeof(uint32_t) * complete);
|
uint32_t *dltimes = tor_malloc(sizeof(uint32_t) * complete);
|
||||||
@ -794,9 +798,11 @@ geoip_get_dirreq_history(geoip_client_action_t action,
|
|||||||
dltimes[9*complete/10-1],
|
dltimes[9*complete/10-1],
|
||||||
dltimes[complete-1]);
|
dltimes[complete-1]);
|
||||||
tor_free(dltimes);
|
tor_free(dltimes);
|
||||||
|
} else {
|
||||||
|
SMARTLIST_FOREACH(dirreq_times, uint32_t *, dlt, tor_free(dlt));
|
||||||
}
|
}
|
||||||
if (written < 0)
|
if (written < 0)
|
||||||
result = NULL;
|
tor_free(result);
|
||||||
smartlist_free(dirreq_times);
|
smartlist_free(dirreq_times);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user