mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
hs: Do not close desc fetch conn. if we can't pick an HSDir
Launching 7 descriptor fetches makes a connection to each HSDir that is 6 and the seventh one fails to pick an HSDir because they are all being used already so it was killing all pending connections at once. Fixes #15937 Signed-off-by: David Goulet <dgoulet@ev0ke.net>
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
o Minor bug fix (hidden service client):
|
||||
- Seven very fast consecutive requests to the same .onion address
|
||||
triggers 7 descriptor fetches. The first six each pick a directory
|
||||
(there are 6 overall) and the seventh one wasn't able to pick one
|
||||
which was triggering a close on all current directory connections. It
|
||||
has been fixed by not closing them if we have pending directory fetch.
|
||||
Fixes #15937; Bugfix on tor-0.2.7.1-alpha.
|
||||
+4
-6
@@ -892,7 +892,6 @@ rend_client_fetch_v2_desc(rend_data_t *query, smartlist_t *hsdirs)
|
||||
void
|
||||
rend_client_refetch_v2_renddesc(rend_data_t *rend_query)
|
||||
{
|
||||
int ret;
|
||||
rend_cache_entry_t *e = NULL;
|
||||
|
||||
tor_assert(rend_query);
|
||||
@@ -912,11 +911,10 @@ rend_client_refetch_v2_renddesc(rend_data_t *rend_query)
|
||||
log_debug(LD_REND, "Fetching v2 rendezvous descriptor for service %s",
|
||||
safe_str_client(rend_query->onion_address));
|
||||
|
||||
ret = rend_client_fetch_v2_desc(rend_query, NULL);
|
||||
if (ret <= 0) {
|
||||
/* Close pending connections on error or if no hsdir can be found. */
|
||||
rend_client_desc_trynow(rend_query->onion_address);
|
||||
}
|
||||
rend_client_fetch_v2_desc(rend_query, NULL);
|
||||
/* We don't need to look the error code because either on failure or
|
||||
* success, the necessary steps to continue the HS connection will be
|
||||
* triggered once the descriptor arrives or if all fetch failed. */
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user