Forráskód Böngészése

fix the stale pointer assert bug reported by joe magic

svn:r2436
Roger Dingledine 20 éve
szülő
commit
7798e3d770
3 módosított fájl, 7 hozzáadás és 2 törlés
  1. 4 2
      src/or/circuitbuild.c
  2. 1 0
      src/or/circuitlist.c
  3. 2 0
      src/or/circuituse.c

+ 4 - 2
src/or/circuitbuild.c

@@ -633,8 +633,8 @@ int circuit_finish_handshake(circuit_t *circ, char *reply) {
  * just give up: for circ to close, and return 0.
  */
 int circuit_truncated(circuit_t *circ, crypt_path_t *layer) {
-  crypt_path_t *victim;
-  connection_t *stream;
+//  crypt_path_t *victim;
+//  connection_t *stream;
 
   tor_assert(circ && CIRCUIT_IS_ORIGIN(circ));
   tor_assert(layer);
@@ -646,6 +646,7 @@ int circuit_truncated(circuit_t *circ, crypt_path_t *layer) {
   circuit_mark_for_close(circ);
   return 0;
 
+#if 0
   while(layer->next != circ->cpath) {
     /* we need to clear out layer->next */
     victim = layer->next;
@@ -668,6 +669,7 @@ int circuit_truncated(circuit_t *circ, crypt_path_t *layer) {
 
   log_fn(LOG_INFO, "finished");
   return 0;
+#endif
 }
 
 /** Decide whether the first bit of the circuit ID will be

+ 1 - 0
src/or/circuitlist.c

@@ -411,6 +411,7 @@ void assert_cpath_layer_ok(const crypt_path_t *cp)
       tor_assert(cp->handshake_state);
       break;
     default:
+      log_fn(LOG_WARN,"Unexpected state %d",cp->state);
       tor_assert(0);
     }
   tor_assert(cp->package_window >= 0);

+ 2 - 0
src/or/circuituse.c

@@ -333,6 +333,8 @@ void circuit_detach_stream(circuit_t *circ, connection_t *conn) {
 
   tor_assert(circ && conn);
 
+  conn->cpath_layer = NULL; /* make sure we don't keep a stale pointer */
+
   if(conn == circ->p_streams) {
     circ->p_streams = conn->next_stream;
     return;