]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix bug in networkstatus spooling: spool more than the first networkstatus.
authorNick Mathewson <nickm@torproject.org>
Tue, 20 Jun 2006 23:06:52 +0000 (23:06 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 20 Jun 2006 23:06:52 +0000 (23:06 +0000)
svn:r6670

src/or/dirserv.c

index 7c2d74bebe973b1636c0b252636e49b9fdb93bdb..c44532723fa8232cc6c7090eebe67314dae6b96e 100644 (file)
@@ -1886,11 +1886,20 @@ connection_dirserv_add_networkstatus_bytes_to_outbuf(connection_t *conn)
     if (conn->cached_dir) {
       int uncompressing = (conn->zlib_state != NULL);
       int r = connection_dirserv_add_dir_bytes_to_outbuf(conn);
-      /* This bit is tricky.  If we were uncompressing the last networkstatus,
-       * we may need to make a new zlib object to uncompress the next one. */
-      if (uncompressing && ! conn->zlib_state &&
-          conn->fingerprint_stack && smartlist_len(conn->fingerprint_stack))
-        conn->zlib_state = tor_zlib_new(0, ZLIB_METHOD);
+      if (conn->dir_spool_src == DIR_SPOOL_NONE) {
+       /* add_dir_bytes thinks we're done with the cached_dir.  But we
+        * may have more cached_dirs! */
+       conn->dir_spool_src = DIR_SPOOL_NETWORKSTATUS;
+       /* This bit is tricky.  If we were uncompressing the last
+        * networkstatus, we may need to make a new zlib object to
+        * uncompress the next one. */
+       if (uncompressing && ! conn->zlib_state &&
+           conn->fingerprint_stack &&
+           smartlist_len(conn->fingerprint_stack)) {
+         log_notice(LD_GENERAL, "New zlib buf.");
+         conn->zlib_state = tor_zlib_new(0, ZLIB_METHOD);
+       }
+      }
       if (r) return r;
     } else if (conn->fingerprint_stack &&
                smartlist_len(conn->fingerprint_stack)) {