Prechádzať zdrojové kódy

Close orconns correctly through channels when setting DisableNetwork to 1

Andrea Shepard 10 rokov pred
rodič
commit
a5544e589d
2 zmenil súbory, kde vykonal 18 pridanie a 0 odobranie
  1. 4 0
      changes/bug11306
  2. 14 0
      src/or/connection.c

+ 4 - 0
changes/bug11306

@@ -0,0 +1,4 @@
+  o Bugfixes:
+    - When closing all connections on setting DisableNetwork to 1, use
+      connection_or_close_normally() rather than closing orconns out from
+      under the channel layer.  Fixes bug #11306.

+ 14 - 0
src/or/connection.c

@@ -2359,6 +2359,20 @@ connection_mark_all_noncontrol_connections(void)
         connection_mark_unattached_ap(TO_ENTRY_CONN(conn),
                                       END_STREAM_REASON_HIBERNATING);
         break;
+      case CONN_TYPE_OR:
+        {
+          or_connection_t *orconn = TO_OR_CONN(conn);
+          if (orconn->chan) {
+            connection_or_close_normally(orconn, 0);
+          } else {
+            /*
+             * There should have been one, but mark for close and hope
+             * for the best..
+             */
+            connection_mark_for_close(conn);
+          }
+        }
+        break;
       default:
         connection_mark_for_close(conn);
         break;