diff options
author | Nick Mathewson <nickm@torproject.org> | 2008-11-03 15:46:05 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2008-11-03 15:46:05 +0000 |
commit | 7b45d530b09d52ebc5cf7b45c57d4f388e3f94ff (patch) | |
tree | 5fa93652fc174b5efa2ddf08b30cb59519a79604 /src/or/policies.c | |
parent | 69cda761682df176c9161f4685debcf01d496345 (diff) | |
download | tor-7b45d530b09d52ebc5cf7b45c57d4f388e3f94ff.tar.gz tor-7b45d530b09d52ebc5cf7b45c57d4f388e3f94ff.zip |
Add some debugging logs for bug 811/845.
svn:r17186
Diffstat (limited to 'src/or/policies.c')
-rw-r--r-- | src/or/policies.c | 42 |
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); } |