Sfoglia il codice sorgente

Revert an erroneous part of the non-fix to bug 326, and add comments to explain why it was erroneous.

svn:r18494
Nick Mathewson 15 anni fa
parent
commit
65dc835773
2 ha cambiato i file con 9 aggiunte e 6 eliminazioni
  1. 3 0
      ChangeLog
  2. 6 6
      src/or/eventdns.c

+ 3 - 0
ChangeLog

@@ -16,6 +16,9 @@ Changes in version 0.2.1.13-????? - 2009-0?-??
       logs. Bugfix on 0.2.1.8-alpha.
     - Clients no longer cache certificates for authorities they do not
       recognize.  Bugfix on 0.2.0.9-alpha.
+    - When we can't transmit a DNS request due to a network error, retry
+      it after a while, and eventually transmit a failing response to the
+      RESOLVED cell.  Bugfix on 0.1.2.5-alpha.
 
   o Minor features:
     - On Linux, use the prctl call to re-enable core dumps when the user

+ 6 - 6
src/or/eventdns.c

@@ -2046,9 +2046,10 @@ evdns_request_transmit(struct evdns_request *req) {
 		nameserver_write_waiting(req->ns, 1);
 		return 1;
 	case 2:
-		/* failed in some other way */
+		/* failed to transmit the request entirely. */
 		retcode = 1;
-		break;
+		/* fall through: we'll set a timeout, which will time out,
+		 * and make us retransmit the request anyway. */
 	default:
 		/* transmitted; we need to check for timeout. */
 		log(EVDNS_LOG_DEBUG,
@@ -2060,11 +2061,10 @@ evdns_request_transmit(struct evdns_request *req) {
 				(unsigned long) req);
 			/* ???? Do more? */
 		}
+		req->tx_count++;
+		req->transmit_me = 0;
+		return retcode;
 	}
-
-	req->tx_count++;
-	req->transmit_me = 0;
-	return retcode;
 }
 
 static void