summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2008-11-03 15:46:05 +0000
committerNick Mathewson <nickm@torproject.org>2008-11-03 15:46:05 +0000
commit7b45d530b09d52ebc5cf7b45c57d4f388e3f94ff (patch)
tree5fa93652fc174b5efa2ddf08b30cb59519a79604
parent69cda761682df176c9161f4685debcf01d496345 (diff)
downloadtor-7b45d530b09d52ebc5cf7b45c57d4f388e3f94ff.tar.gz
tor-7b45d530b09d52ebc5cf7b45c57d4f388e3f94ff.zip
Add some debugging logs for bug 811/845.
svn:r17186
-rw-r--r--src/or/policies.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/or/policies.c b/src/or/policies.c
index 64d73375c8..4a6204621b 100644
--- a/src/or/policies.c
+++ b/src/or/policies.c
@@ -1237,6 +1237,48 @@ addr_policy_free(addr_policy_t *p)
search.policy = p;
found = HT_REMOVE(policy_map, &policy_root, &search);
if (found) {
+ if (p != found->policy) {
+ /* Debugging code for bug 811/845. XXXX021 remove once that's
+ * fixed. */
+ char *t1, *t2;
+ char b1[TOR_ADDR_BUF_LEN], b2[TOR_ADDR_BUF_LEN];
+ switch (p->policy_type) {
+ case ADDR_POLICY_ACCEPT: t1 = tor_strdup("accept"); break;
+ case ADDR_POLICY_REJECT: t1 = tor_strdup("reject"); break;
+ default:
+ t1 = tor_malloc(16);
+ tor_snprintf(t1, 16, "%d", (int)p->policy_type);
+ break;
+ }
+ switch (found->policy->policy_type) {
+ case ADDR_POLICY_ACCEPT: t2 = tor_strdup("accept"); break;
+ case ADDR_POLICY_REJECT: t2 = tor_strdup("reject"); break;
+ default:
+ t2 = tor_malloc(16);
+ tor_snprintf(t2, 16, "%d", (int)found->policy->policy_type);
+ break;
+ }
+
+ tor_addr_to_str(b1, &p->addr, sizeof(b1), 1);
+ tor_addr_to_str(b2, &found->policy->addr, sizeof(b2), 1);
+ log_err(LD_GENERAL,
+ "Mismatch between cached policy and freed policy. "
+ "p==%s %s/%d:%d-%d%s%s. "
+ "found->policy==%s %s/%d:%d-%d%s%s.",
+ t1, b1, (int)p->maskbits, (int)p->prt_min, (int)p->prt_max,
+ p->is_private?" [Private]":"",
+ p->is_canonical?" [Canonical]":"",
+ t2, b2, (int)found->policy->maskbits,
+ (int)found->policy->prt_min, (int)found->policy->prt_max,
+ found->policy->is_private?" [Private]":"",
+ found->policy->is_canonical?" [Canonical]":"");
+
+ log_err(LD_GENERAL,
+ "cmp_single_addr_policy(p,found->policy)==%d. "
+ "tor_addr_compare(&p->addr, &found->policy->addr, CMP_EXACT)==%d",
+ cmp_single_addr_policy(p,found->policy),
+ tor_addr_compare(&p->addr, &found->policy->addr, CMP_EXACT));
+ }
tor_assert(p == found->policy);
tor_free(found);
}