mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
free another string, and the buffer freelists, on exit.
svn:r10851
This commit is contained in:
+7
-4
@@ -254,9 +254,10 @@ buf_get_initial_mem(buf_t *buf, size_t sz)
|
||||
}
|
||||
|
||||
/** Remove elements from the freelists that haven't been needed since the
|
||||
* last call to this function. */
|
||||
* last call to this function. If <b>free_all</b>, we're exiting and we
|
||||
* should clear the whole lists. */
|
||||
void
|
||||
buf_shrink_freelists(void)
|
||||
buf_shrink_freelists(int free_all)
|
||||
{
|
||||
int j;
|
||||
for (j = 0; j < 2; ++j) {
|
||||
@@ -267,8 +268,10 @@ buf_shrink_freelists(void)
|
||||
log_info(LD_GENERAL, "We haven't used %d/%d allocated %d-byte buffer "
|
||||
"memory chunks since the last call; freeing all but %d of them",
|
||||
list->lowwater, list->len, (int)list->chunksize, list->slack);
|
||||
/* Skip over the slack and non-lowwater entries */
|
||||
n_to_free = list->lowwater - list->slack;
|
||||
if (free_all) /* Free every one of them */
|
||||
n_to_free = list->len;
|
||||
else /* Skip over the slack and non-lowwater entries */
|
||||
n_to_free = list->lowwater - list->slack;
|
||||
n_to_skip = list->len - n_to_free;
|
||||
for (ptr = &list->list, i = 0; i < n_to_skip; ++i) {
|
||||
char *mem = *ptr;
|
||||
|
||||
+8
-6
@@ -715,21 +715,22 @@ set_options(or_options_t *new_val, char **msg)
|
||||
|
||||
extern const char tor_svn_revision[]; /* from tor_main.c */
|
||||
|
||||
static char *_version = NULL;
|
||||
|
||||
/** Return the current Tor version, possibly */
|
||||
const char *
|
||||
get_version(void)
|
||||
{
|
||||
static char *version = NULL;
|
||||
if (version == NULL) {
|
||||
if (_version == NULL) {
|
||||
if (strlen(tor_svn_revision)) {
|
||||
size_t len = strlen(VERSION)+strlen(tor_svn_revision)+8;
|
||||
version = tor_malloc(len);
|
||||
tor_snprintf(version, len, "%s (r%s)", VERSION, tor_svn_revision);
|
||||
_version = tor_malloc(len);
|
||||
tor_snprintf(_version, len, "%s (r%s)", VERSION, tor_svn_revision);
|
||||
} else {
|
||||
version = tor_strdup(VERSION);
|
||||
_version = tor_strdup(VERSION);
|
||||
}
|
||||
}
|
||||
return version;
|
||||
return _version;
|
||||
}
|
||||
|
||||
/** Release all memory and resources held by global configuration structures.
|
||||
@@ -746,6 +747,7 @@ config_free_all(void)
|
||||
global_state = NULL;
|
||||
}
|
||||
tor_free(torrc_fname);
|
||||
tor_free(_version);
|
||||
}
|
||||
|
||||
/** If options->SafeLogging is on, return a not very useful string,
|
||||
|
||||
+2
-1
@@ -1046,7 +1046,7 @@ run_scheduled_events(time_t now)
|
||||
buf_shrink(conn->inbuf);
|
||||
});
|
||||
clean_cell_pool();
|
||||
buf_shrink_freelists();
|
||||
buf_shrink_freelists(0);
|
||||
time_to_shrink_memory = now + MEM_SHRINK_INTERVAL;
|
||||
}
|
||||
|
||||
@@ -1767,6 +1767,7 @@ tor_free_all(int postfork)
|
||||
circuit_free_all();
|
||||
entry_guards_free_all();
|
||||
connection_free_all();
|
||||
buf_shrink_freelists(1);
|
||||
policies_free_all();
|
||||
if (!postfork) {
|
||||
config_free_all();
|
||||
|
||||
+1
-1
@@ -2149,7 +2149,7 @@ buf_t *buf_new_with_capacity(size_t size);
|
||||
void buf_free(buf_t *buf);
|
||||
void buf_clear(buf_t *buf);
|
||||
void buf_shrink(buf_t *buf);
|
||||
void buf_shrink_freelists(void);
|
||||
void buf_shrink_freelists(int free_all);
|
||||
|
||||
size_t buf_datalen(const buf_t *buf);
|
||||
size_t buf_capacity(const buf_t *buf);
|
||||
|
||||
Reference in New Issue
Block a user