|
@@ -809,20 +809,22 @@ router_choose_random_node(const char *preferred,
|
|
|
int allow_unverified, int strict)
|
|
|
{
|
|
|
smartlist_t *sl, *excludednodes;
|
|
|
- routerinfo_t *choice;
|
|
|
+ routerinfo_t *choice = NULL;
|
|
|
|
|
|
excludednodes = smartlist_create();
|
|
|
add_nickname_list_to_smartlist(excludednodes,excluded,0,0,1);
|
|
|
|
|
|
/* Try the preferred nodes first. Ignore need_uptime and need_capacity,
|
|
|
* since the user explicitly asked for these nodes. */
|
|
|
- sl = smartlist_create();
|
|
|
- add_nickname_list_to_smartlist(sl,preferred,1,1,1);
|
|
|
- smartlist_subtract(sl,excludednodes);
|
|
|
- if (excludedsmartlist)
|
|
|
- smartlist_subtract(sl,excludedsmartlist);
|
|
|
- choice = smartlist_choose(sl);
|
|
|
- smartlist_free(sl);
|
|
|
+ if (preferred) {
|
|
|
+ sl = smartlist_create();
|
|
|
+ add_nickname_list_to_smartlist(sl,preferred,1,1,1);
|
|
|
+ smartlist_subtract(sl,excludednodes);
|
|
|
+ if (excludedsmartlist)
|
|
|
+ smartlist_subtract(sl,excludedsmartlist);
|
|
|
+ choice = smartlist_choose(sl);
|
|
|
+ smartlist_free(sl);
|
|
|
+ }
|
|
|
if (!choice && !strict) {
|
|
|
/* Then give up on our preferred choices: any node
|
|
|
* will do that has the required attributes. */
|