}
}
+/* Remove all elements from the list. */
+void smartlist_clear(smartlist_t *sl) {
+ sl->num_used = 0;
+}
+
/* add element to the list, but only if there's room */
void smartlist_add(smartlist_t *sl, void *element) {
if (sl->num_used >= sl->capacity) {
smartlist_t *smartlist_create();
void smartlist_free(smartlist_t *sl);
void smartlist_set_capacity(smartlist_t *sl, int n);
+void smartlist_clear(smartlist_t *sl);
void smartlist_add(smartlist_t *sl, void *element);
void smartlist_remove(smartlist_t *sl, void *element);
int smartlist_isin(smartlist_t *sl, void *element);
rend_service_t *service;
char *desc, *intro;
int changed, prev_intro_nodes, desc_len;
+ smartlist_t *intro_routers;
router_get_routerlist(&rl);
+ intro_routers = smartlist_create();
for (i=0; i< smartlist_len(rend_service_list); ++i) {
+ smartlist_clear(intro_routers);
service = smartlist_get(rend_service_list, i);
assert(service);
smartlist_del(service->intro_nodes,j--);
changed = 1;
}
+ smartlist_add(intro_routers, router);
}
/* We have enough intro points, and the intro points we thought we had were
router = router_choose_random_node(rl,
service->intro_prefer_nodes,
service->intro_exclude_nodes,
- service->intro_nodes);
+ intro_routers);
if (!router) {
log_fn(LOG_WARN, "Can't establish more than %d introduction points",
smartlist_len(service->intro_nodes));
break;
}
changed = 1;
+ smartlist_add(intro_routers, router);
smartlist_add(service->intro_nodes, tor_strdup(router->nickname));
}
}
}
}
+ smartlist_free(intro_routers);
+
return 0;
}