|  | @@ -4189,10 +4189,11 @@ get_dir_info_status_string(void)
 | 
	
		
			
				|  |  |  static void
 | 
	
		
			
				|  |  |  update_router_have_minimum_dir_info(void)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -  int num_present = 0, num_usable=0;
 | 
	
		
			
				|  |  | +  int num_present = 0, num_usable=0, num_running=0;
 | 
	
		
			
				|  |  |    time_t now = time(NULL);
 | 
	
		
			
				|  |  |    int res;
 | 
	
		
			
				|  |  |    or_options_t *options = get_options();
 | 
	
		
			
				|  |  | +  routerinfo_t *ri;
 | 
	
		
			
				|  |  |    const networkstatus_t *consensus =
 | 
	
		
			
				|  |  |      networkstatus_get_reasonably_live_consensus(now);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -4218,9 +4219,13 @@ update_router_have_minimum_dir_info(void)
 | 
	
		
			
				|  |  |    SMARTLIST_FOREACH(consensus->routerstatus_list, routerstatus_t *, rs,
 | 
	
		
			
				|  |  |       {
 | 
	
		
			
				|  |  |         if (client_would_use_router(rs, now, options)) {
 | 
	
		
			
				|  |  | -         ++num_usable;
 | 
	
		
			
				|  |  | -         if (router_get_by_digest(rs->identity_digest)) {
 | 
	
		
			
				|  |  | -           ++num_present;
 | 
	
		
			
				|  |  | +         ++num_usable; /* the consensus says we want it. */
 | 
	
		
			
				|  |  | +         /* XXX021 shouldn't we look up by descriptor digest? */
 | 
	
		
			
				|  |  | +         ri = router_get_by_digest(rs->identity_digest);
 | 
	
		
			
				|  |  | +         if (ri) {
 | 
	
		
			
				|  |  | +           ++num_present; /* we have some descriptor for it. */
 | 
	
		
			
				|  |  | +           if (ri->is_running)
 | 
	
		
			
				|  |  | +             ++num_running; /* our local status says it's still up. */
 | 
	
		
			
				|  |  |           }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |       });
 | 
	
	
		
			
				|  | @@ -4229,10 +4234,10 @@ update_router_have_minimum_dir_info(void)
 | 
	
		
			
				|  |  |      tor_snprintf(dir_info_status, sizeof(dir_info_status),
 | 
	
		
			
				|  |  |              "We have only %d/%d usable descriptors.", num_present, num_usable);
 | 
	
		
			
				|  |  |      res = 0;
 | 
	
		
			
				|  |  | -  } else if (num_present < 2) {
 | 
	
		
			
				|  |  | +  } else if (num_running < 2) {
 | 
	
		
			
				|  |  |      tor_snprintf(dir_info_status, sizeof(dir_info_status),
 | 
	
		
			
				|  |  | -                 "Only %d usable descriptor%s known!", num_present,
 | 
	
		
			
				|  |  | -                 num_present ? "" : "s");
 | 
	
		
			
				|  |  | +                 "Only %d descriptor%s believed reachable!", num_running,
 | 
	
		
			
				|  |  | +                 num_running ? "" : "s");
 | 
	
		
			
				|  |  |      res = 0;
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  |      res = 1;
 | 
	
	
		
			
				|  | @@ -4247,7 +4252,7 @@ update_router_have_minimum_dir_info(void)
 | 
	
		
			
				|  |  |    if (!res && have_min_dir_info) {
 | 
	
		
			
				|  |  |      log(LOG_NOTICE, LD_DIR,"Our directory information is no longer up-to-date "
 | 
	
		
			
				|  |  |          "enough to build circuits.%s",
 | 
	
		
			
				|  |  | -        num_usable > 2 ? "" : " (Not enough servers seem reachable -- "
 | 
	
		
			
				|  |  | +        num_running > 2 ? "" : " (Not enough servers seem reachable -- "
 | 
	
		
			
				|  |  |          "is your network connection down?)");
 | 
	
		
			
				|  |  |      control_event_client_status(LOG_NOTICE, "NOT_ENOUGH_DIR_INFO");
 | 
	
		
			
				|  |  |    }
 |