[or-cvs] fix assert triggers (bugs 109 and 96), and put in some

Roger Dingledine arma at seul.org
Wed Mar 23 02:52:58 UTC 2005


Update of /home2/or/cvsroot/tor/src/or
In directory moria.mit.edu:/home2/arma/work/onion/cvs/tor/src/or

Modified Files:
	connection.c connection_edge.c relay.c 
Log Message:
fix assert triggers (bugs 109 and 96), and put in some
debugging logs to notice future repeat bugs.


Index: connection.c
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/connection.c,v
retrieving revision 1.339
retrieving revision 1.340
diff -u -d -r1.339 -r1.340
--- connection.c	22 Mar 2005 23:57:18 -0000	1.339
+++ connection.c	23 Mar 2005 02:52:55 -0000	1.340
@@ -1616,8 +1616,10 @@
     tor_assert(conn->socks_request);
     if (conn->state == AP_CONN_STATE_OPEN) {
       tor_assert(conn->socks_request->has_finished);
-      tor_assert(conn->cpath_layer);
-      assert_cpath_layer_ok(conn->cpath_layer);
+      if (!conn->marked_for_close) {
+        tor_assert(conn->cpath_layer);
+        assert_cpath_layer_ok(conn->cpath_layer);
+      }
     }
   } else {
     tor_assert(!conn->socks_request);

Index: connection_edge.c
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/connection_edge.c,v
retrieving revision 1.302
retrieving revision 1.303
diff -u -d -r1.302 -r1.303
--- connection_edge.c	23 Mar 2005 00:19:51 -0000	1.302
+++ connection_edge.c	23 Mar 2005 02:52:55 -0000	1.303
@@ -115,6 +115,7 @@
   conn->has_sent_end = 1; /* we're closing the circuit, nothing to send to */
   connection_mark_for_close(conn);
   conn->hold_open_until_flushed = 1;
+  conn->cpath_layer = NULL;
   return 0;
 }
 
@@ -141,6 +142,12 @@
     return -1;
   }
 
+  if (conn->marked_for_close) {
+    log_fn(LOG_WARN,"Bug: called on conn that's already marked for close at %s:%d.",
+           conn->marked_for_close_file, conn->marked_for_close);
+    return 0;
+  }
+
   payload[0] = reason;
   if (reason == END_STREAM_REASON_EXITPOLICY) {
     /* this is safe even for rend circs, because they never fail

Index: relay.c
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/relay.c,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -d -r1.51 -r1.52
--- relay.c	22 Mar 2005 19:36:38 -0000	1.51
+++ relay.c	23 Mar 2005 02:52:55 -0000	1.52
@@ -407,6 +407,12 @@
   relay_header_t rh;
   int cell_direction;
 
+  if (fromconn->marked_for_close) {
+    log_fn(LOG_WARN,"Bug: called on conn that's already marked for close at %s:%d.",
+           fromconn->marked_for_close_file, fromconn->marked_for_close);
+    return 0;
+  }
+
   if (!circ) {
     log_fn(LOG_WARN,"no circ. Closing conn.");
     tor_assert(fromconn);
@@ -974,6 +980,11 @@
 
   tor_assert(conn);
   tor_assert(!connection_speaks_cells(conn));
+  if (conn->marked_for_close) {
+    log_fn(LOG_WARN,"Bug: called on conn that's already marked for close at %s:%d.",
+           conn->marked_for_close_file, conn->marked_for_close);
+    return 0;
+  }
 
 repeat_connection_edge_package_raw_inbuf:
 



More information about the tor-commits mailing list