From: Nick Mathewson Date: Tue, 20 Jun 2006 23:06:52 +0000 (+0000) Subject: Fix bug in networkstatus spooling: spool more than the first networkstatus. X-Git-Tag: tor-0.1.1.23~176 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0799154ae11ef2fff410cf6c4162fc7ecbc7d436;p=thirdparty%2Ftor.git Fix bug in networkstatus spooling: spool more than the first networkstatus. svn:r6670 --- diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 7c2d74bebe..c44532723f 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -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)) {