]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Give a better error when something has changed our descriptor cache out from under...
authorNick Mathewson <nickm@torproject.org>
Wed, 10 Dec 2008 03:01:26 +0000 (03:01 +0000)
committerNick Mathewson <nickm@torproject.org>
Wed, 10 Dec 2008 03:01:26 +0000 (03:01 +0000)
svn:r17550

ChangeLog
src/or/routerlist.c

index 7c903b7edc61ca08f37b75674a96f868efcf7cd6..a08561feeb637791565d20bd528bab961d2b46b2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -12,6 +12,9 @@ Changes in version 0.2.1.9-alpha - 200?-??-??
       been fetched and validated.
     - Finally remove deprecated "EXTENEDED_FORMAT" feature.  It has
       been called EXTENDED_EVENTS since 0.1.2.4-alpha.
+    - When we realize that another process has modified our cached
+      descriptors, print out a more useful error message rather than
+      triggering an assertion. Fixes bug 885.
 
   o Minor bugfixes:
     - Resume using the correct "REASON=" stream when telling the
index e2f3170b6ab848681ac4f21bf57efe60fa57bd5f..5ed8813f9a0325d1af3de97dc800fd3ead37d196 100644 (file)
@@ -2211,6 +2211,11 @@ signed_descriptor_get_body_impl(signed_descriptor_t *desc,
     if (store && store->mmap) {
       tor_assert(desc->saved_offset + len <= store->mmap->size);
       r = store->mmap->data + offset;
+    } else if (store) {
+      log_err(LD_DIR, "We couldn't read a descriptor that is supposedly "
+              "mmaped in our cache.  Is another process running in our data "
+              "directory?  Exiting.");
+      exit(1);
     }
   }
   if (!r) /* no mmap, or not in cache. */
@@ -2221,11 +2226,11 @@ signed_descriptor_get_body_impl(signed_descriptor_t *desc,
   if (!with_annotations) {
     if (memcmp("router ", r, 7) && memcmp("extra-info ", r, 11)) {
       char *cp = tor_strndup(r, 64);
-      log_err(LD_DIR, "descriptor at %p begins with unexpected string %s",
+      log_err(LD_DIR, "descriptor at %p begins with unexpected string %s.  "
+              "Is another process running in our data directory?  Exiting.",
               desc, escaped(cp));
-      tor_free(cp);
+      exit(1);
     }
-    tor_assert(!memcmp("router ", r, 7) || !memcmp("extra-info ", r, 11));
   }
 
   return r;