|
@@ -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)) {
|