summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2017-09-29 09:24:01 -0400
committerNick Mathewson <nickm@torproject.org>2017-09-29 09:24:01 -0400
commit1b6ccb52eab139cd836e01316c46252e8c143288 (patch)
treef3ef0f483a726d795da1a44227488521dec651c5
parent4e6374c26b909027bd90ad722902205e5eaa13f4 (diff)
downloadtor-1b6ccb52eab139cd836e01316c46252e8c143288.tar.gz
tor-1b6ccb52eab139cd836e01316c46252e8c143288.zip
Log more information when bug8185 is about to trigger.
My current theory is that this is just a marked circuit that hasn't closed yet, but let's gather more information in case that theory is wrong. Diagnostic for 8185.
-rw-r--r--changes/8185_diagnostic4
-rw-r--r--src/or/relay.c10
2 files changed, 13 insertions, 1 deletions
diff --git a/changes/8185_diagnostic b/changes/8185_diagnostic
new file mode 100644
index 0000000000..b809c4f3ee
--- /dev/null
+++ b/changes/8185_diagnostic
@@ -0,0 +1,4 @@
+ o Minor features (logging diagnostic):
+ - Log more circuit information whenever we are about to try to
+ package a relay cell on a circuit with a nonexistent n_chan.
+ Attempt to diagnose bug 8185.
diff --git a/src/or/relay.c b/src/or/relay.c
index 2bfec342d3..ef4b1f423f 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -500,7 +500,15 @@ circuit_package_relay_cell(cell_t *cell, circuit_t *circ,
chan = circ->n_chan;
if (!chan) {
log_warn(LD_BUG,"outgoing relay cell sent from %s:%d has n_chan==NULL."
- " Dropping.", filename, lineno);
+ " Dropping. Circuit is in state %s (%d), and is "
+ "%smarked for close. (%s:%d, %d)", filename, lineno,
+ circuit_state_to_string(circ->state), circ->state,
+ circ->marked_for_close ? "" : "not ",
+ circ->marked_for_close_file?circ->marked_for_close_file:"",
+ circ->marked_for_close, circ->marked_for_close_reason);
+ if (CIRCUIT_IS_ORIGIN(circ)) {
+ circuit_log_path(LOG_WARN, LD_BUG, TO_ORIGIN_CIRCUIT(circ));
+ }
log_backtrace(LOG_WARN,LD_BUG,"");
return 0; /* just drop it */
}