mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 13:43:47 +01:00
Remove maximum-size field from smartlists
svn:r1397
This commit is contained in:
parent
0ba9ab5fb0
commit
96a86ef14d
@ -117,16 +117,10 @@ void set_uint32(char *cp, uint32_t v)
|
|||||||
* _add() adds an element, _remove() removes an element if it's there,
|
* _add() adds an element, _remove() removes an element if it's there,
|
||||||
* _choose() returns a random element.
|
* _choose() returns a random element.
|
||||||
*/
|
*/
|
||||||
#define SL_DEFAULT_CAPACITY 32
|
smartlist_t *smartlist_create(int capacity) {
|
||||||
|
|
||||||
smartlist_t *smartlist_create(int max_elements) {
|
|
||||||
smartlist_t *sl = tor_malloc(sizeof(smartlist_t));
|
smartlist_t *sl = tor_malloc(sizeof(smartlist_t));
|
||||||
sl->num_used = 0;
|
sl->num_used = 0;
|
||||||
sl->max = max_elements;
|
sl->capacity = capacity;
|
||||||
if (max_elements <= SL_DEFAULT_CAPACITY)
|
|
||||||
sl->capacity = max_elements;
|
|
||||||
else
|
|
||||||
sl->capacity = SL_DEFAULT_CAPACITY;
|
|
||||||
sl->list = tor_malloc(sizeof(void *) * sl->capacity);
|
sl->list = tor_malloc(sizeof(void *) * sl->capacity);
|
||||||
return sl;
|
return sl;
|
||||||
}
|
}
|
||||||
@ -145,14 +139,11 @@ void smartlist_grow_capacity(smartlist_t *sl, int n) {
|
|||||||
|
|
||||||
/* add element to the list, but only if there's room */
|
/* add element to the list, but only if there's room */
|
||||||
void smartlist_add(smartlist_t *sl, void *element) {
|
void smartlist_add(smartlist_t *sl, void *element) {
|
||||||
if (sl->num_used < sl->max) {
|
|
||||||
if (sl->num_used >= sl->capacity) {
|
if (sl->num_used >= sl->capacity) {
|
||||||
sl->capacity *= 2;
|
sl->capacity *= 2;
|
||||||
sl->list = tor_realloc(sl->list, sizeof(void*)*sl->capacity);
|
sl->list = tor_realloc(sl->list, sizeof(void*)*sl->capacity);
|
||||||
}
|
}
|
||||||
sl->list[sl->num_used++] = element;
|
sl->list[sl->num_used++] = element;
|
||||||
} else
|
|
||||||
log_fn(LOG_WARN,"We've already got %d elements, discarding.",sl->max);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void smartlist_remove(smartlist_t *sl, void *element) {
|
void smartlist_remove(smartlist_t *sl, void *element) {
|
||||||
|
@ -61,11 +61,10 @@ void set_uint32(char *cp, uint32_t v);
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
void **list;
|
void **list;
|
||||||
int num_used;
|
int num_used;
|
||||||
int max;
|
|
||||||
int capacity;
|
int capacity;
|
||||||
} smartlist_t;
|
} smartlist_t;
|
||||||
|
|
||||||
smartlist_t *smartlist_create(int max_elements);
|
smartlist_t *smartlist_create(int capacity);
|
||||||
void smartlist_free(smartlist_t *sl);
|
void smartlist_free(smartlist_t *sl);
|
||||||
void smartlist_grow_capacity(smartlist_t *sl, int n);
|
void smartlist_grow_capacity(smartlist_t *sl, int n);
|
||||||
void smartlist_add(smartlist_t *sl, void *element);
|
void smartlist_add(smartlist_t *sl, void *element);
|
||||||
|
@ -300,13 +300,13 @@ static routerinfo_t *choose_good_exit_server(routerlist_t *dir)
|
|||||||
log_fn(LOG_INFO, "Found %d servers that might support %d/%d pending connections.",
|
log_fn(LOG_INFO, "Found %d servers that might support %d/%d pending connections.",
|
||||||
n_best_support, best_support, n_pending_connections);
|
n_best_support, best_support, n_pending_connections);
|
||||||
|
|
||||||
preferredexits = smartlist_create(MAX_ROUTERS_IN_DIR);
|
preferredexits = smartlist_create(16);
|
||||||
add_nickname_list_to_smartlist(preferredexits,options.ExitNodes);
|
add_nickname_list_to_smartlist(preferredexits,options.ExitNodes);
|
||||||
|
|
||||||
excludedexits = smartlist_create(MAX_ROUTERS_IN_DIR);
|
excludedexits = smartlist_create(16);
|
||||||
add_nickname_list_to_smartlist(excludedexits,options.ExcludeNodes);
|
add_nickname_list_to_smartlist(excludedexits,options.ExcludeNodes);
|
||||||
|
|
||||||
sl = smartlist_create(MAX_ROUTERS_IN_DIR);
|
sl = smartlist_create(dir->n_routers);
|
||||||
|
|
||||||
/* If any routers definitely support any pending connections, choose one
|
/* If any routers definitely support any pending connections, choose one
|
||||||
* at random. */
|
* at random. */
|
||||||
@ -450,7 +450,7 @@ int onion_extend_cpath(crypt_path_t **head_ptr, cpath_build_state_t *state, rout
|
|||||||
log_fn(LOG_DEBUG, "Path is %d long; we want %d", cur_len,
|
log_fn(LOG_DEBUG, "Path is %d long; we want %d", cur_len,
|
||||||
state->desired_path_len);
|
state->desired_path_len);
|
||||||
|
|
||||||
excludednodes = smartlist_create(MAX_ROUTERS_IN_DIR);
|
excludednodes = smartlist_create(16);
|
||||||
add_nickname_list_to_smartlist(excludednodes,options.ExcludeNodes);
|
add_nickname_list_to_smartlist(excludednodes,options.ExcludeNodes);
|
||||||
|
|
||||||
if(cur_len == state->desired_path_len - 1) { /* Picking last node */
|
if(cur_len == state->desired_path_len - 1) { /* Picking last node */
|
||||||
@ -465,7 +465,7 @@ int onion_extend_cpath(crypt_path_t **head_ptr, cpath_build_state_t *state, rout
|
|||||||
}
|
}
|
||||||
} else if(cur_len == 0) { /* picking first node */
|
} else if(cur_len == 0) { /* picking first node */
|
||||||
/* try the nodes in EntryNodes first */
|
/* try the nodes in EntryNodes first */
|
||||||
sl = smartlist_create(MAX_ROUTERS_IN_DIR);
|
sl = smartlist_create(16);
|
||||||
add_nickname_list_to_smartlist(sl,options.EntryNodes);
|
add_nickname_list_to_smartlist(sl,options.EntryNodes);
|
||||||
/* XXX one day, consider picking chosen_exit knowing what's in EntryNodes */
|
/* XXX one day, consider picking chosen_exit knowing what's in EntryNodes */
|
||||||
remove_twins_from_smartlist(sl,router_get_by_nickname(state->chosen_exit));
|
remove_twins_from_smartlist(sl,router_get_by_nickname(state->chosen_exit));
|
||||||
@ -473,7 +473,7 @@ int onion_extend_cpath(crypt_path_t **head_ptr, cpath_build_state_t *state, rout
|
|||||||
choice = smartlist_choose(sl);
|
choice = smartlist_choose(sl);
|
||||||
smartlist_free(sl);
|
smartlist_free(sl);
|
||||||
if(!choice) {
|
if(!choice) {
|
||||||
sl = smartlist_create(MAX_ROUTERS_IN_DIR);
|
sl = smartlist_create(32);
|
||||||
router_add_running_routers_to_smartlist(sl);
|
router_add_running_routers_to_smartlist(sl);
|
||||||
remove_twins_from_smartlist(sl,router_get_by_nickname(state->chosen_exit));
|
remove_twins_from_smartlist(sl,router_get_by_nickname(state->chosen_exit));
|
||||||
smartlist_subtract(sl,excludednodes);
|
smartlist_subtract(sl,excludednodes);
|
||||||
@ -487,7 +487,7 @@ int onion_extend_cpath(crypt_path_t **head_ptr, cpath_build_state_t *state, rout
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log_fn(LOG_DEBUG, "Contemplating intermediate hop: random choice.");
|
log_fn(LOG_DEBUG, "Contemplating intermediate hop: random choice.");
|
||||||
sl = smartlist_create(MAX_ROUTERS_IN_DIR);
|
sl = smartlist_create(32);
|
||||||
router_add_running_routers_to_smartlist(sl);
|
router_add_running_routers_to_smartlist(sl);
|
||||||
remove_twins_from_smartlist(sl,router_get_by_nickname(state->chosen_exit));
|
remove_twins_from_smartlist(sl,router_get_by_nickname(state->chosen_exit));
|
||||||
for (i = 0, cpath = *head_ptr; i < cur_len; ++i, cpath=cpath->next) {
|
for (i = 0, cpath = *head_ptr; i < cur_len; ++i, cpath=cpath->next) {
|
||||||
|
@ -164,7 +164,7 @@ static routerinfo_t *router_pick_directory_server_impl(void) {
|
|||||||
if(!routerlist)
|
if(!routerlist)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
sl = smartlist_create(MAX_ROUTERS_IN_DIR);
|
sl = smartlist_create(8);
|
||||||
for(i=0;i<routerlist->n_routers;i++) {
|
for(i=0;i<routerlist->n_routers;i++) {
|
||||||
router = routerlist->routers[i];
|
router = routerlist->routers[i];
|
||||||
if(router->dir_port > 0 && router->is_running)
|
if(router->dir_port > 0 && router->is_running)
|
||||||
@ -605,7 +605,7 @@ router_get_routerlist_from_directory_impl(const char *str,
|
|||||||
end = str + strlen(str);
|
end = str + strlen(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
tokens = smartlist_create(128);
|
tokens = smartlist_create(16);
|
||||||
if (tokenize_string(str,end,tokens,1)) {
|
if (tokenize_string(str,end,tokens,1)) {
|
||||||
log_fn(LOG_WARN, "Error tokenizing directory"); goto err;
|
log_fn(LOG_WARN, "Error tokenizing directory"); goto err;
|
||||||
}
|
}
|
||||||
@ -671,7 +671,7 @@ router_get_routerlist_from_directory_impl(const char *str,
|
|||||||
token_free((directory_token_t*)tokens->list[i]);
|
token_free((directory_token_t*)tokens->list[i]);
|
||||||
}
|
}
|
||||||
smartlist_free(tokens);
|
smartlist_free(tokens);
|
||||||
tokens = smartlist_create(128);
|
tokens = smartlist_create(16);
|
||||||
if (tokenize_string(str,str+strlen(str),tokens,1)<0) {
|
if (tokenize_string(str,str+strlen(str),tokens,1)<0) {
|
||||||
log_fn(LOG_WARN, "Error tokenizing signature"); goto err;
|
log_fn(LOG_WARN, "Error tokenizing signature"); goto err;
|
||||||
}
|
}
|
||||||
@ -817,7 +817,7 @@ routerinfo_t *router_get_entry_from_string(const char *s,
|
|||||||
log_fn(LOG_WARN, "Couldn't compute router hash.");
|
log_fn(LOG_WARN, "Couldn't compute router hash.");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
tokens = smartlist_create(128);
|
tokens = smartlist_create(16);
|
||||||
if (tokenize_string(s,end,tokens,0)) {
|
if (tokenize_string(s,end,tokens,0)) {
|
||||||
log_fn(LOG_WARN, "Error tokeninzing router descriptor."); goto err;
|
log_fn(LOG_WARN, "Error tokeninzing router descriptor."); goto err;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user