Explorar el Código

another possible patch related to circuit_free and memory stomping.

svn:r5580
Nick Mathewson hace 18 años
padre
commit
7e632a7564
Se han modificado 1 ficheros con 6 adiciones y 3 borrados
  1. 6 3
      src/or/circuitlist.c

+ 6 - 3
src/or/circuitlist.c

@@ -280,6 +280,7 @@ circuit_free(circuit_t *circ)
   tor_free(circ->onionskin);
   circuit_free_cpath(circ->cpath);
   if (circ->rend_splice) {
+    tor_assert(circ->rend_splice->magic == CIRCUIT_MAGIC);
     circ->rend_splice->rend_splice = NULL;
   }
   /* Remove from map. */
@@ -715,9 +716,11 @@ _circuit_mark_for_close(circuit_t *circ, int line, const char *file)
   circ->marked_for_close = line;
   circ->marked_for_close_file = file;
 
-  if (circ->rend_splice && !circ->rend_splice->marked_for_close) {
-    /* do this after marking this circuit, to avoid infinite recursion. */
-    circuit_mark_for_close(circ->rend_splice);
+  if (circ->rend_splice) {
+    if (!circ->rend_splice->marked_for_close) {
+      /* do this after marking this circuit, to avoid infinite recursion. */
+      circuit_mark_for_close(circ->rend_splice);
+    }
     circ->rend_splice = NULL;
   }
 }