Prechádzať zdrojové kódy

Merge remote-tracking branch 'andrea/bug11306'

Nick Mathewson 10 rokov pred
rodič
commit
74ddd5f739
3 zmenil súbory, kde vykonal 22 pridanie a 1 odobranie
  1. 4 0
      changes/bug11306
  2. 4 1
      src/or/config.c
  3. 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.

+ 4 - 1
src/or/config.c

@@ -1179,10 +1179,13 @@ options_act_reversible(const or_options_t *old_options, char **msg)
 
   SMARTLIST_FOREACH(replaced_listeners, connection_t *, conn,
   {
+    int marked = conn->marked_for_close;
     log_notice(LD_NET, "Closing old %s on %s:%d",
                conn_type_to_string(conn->type), conn->address, conn->port);
     connection_close_immediate(conn);
-    connection_mark_for_close(conn);
+    if (!marked) {
+      connection_mark_for_close(conn);
+    }
   });
   goto done;
 

+ 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;