Procházet zdrojové kódy

Merge remote-tracking branch 'andrea/bug11302'

Nick Mathewson před 9 roky
rodič
revize
b408125288
2 změnil soubory, kde provedl 13 přidání a 3 odebrání
  1. 4 0
      changes/bug11302
  2. 9 3
      src/or/connection.c

+ 4 - 0
changes/bug11302

@@ -0,0 +1,4 @@
+  o Bugfixes:
+    - Check for orconns and use connection_or_close_for_error() rather than
+      connection_mark_for_close() directly in the getsockopt() failure case
+      of connection_handle_write_impl().  Fixes bug #11302.

+ 9 - 3
src/or/connection.c

@@ -3715,9 +3715,15 @@ connection_handle_write_impl(connection_t *conn, int force)
   if (connection_state_is_connecting(conn)) {
     if (getsockopt(conn->s, SOL_SOCKET, SO_ERROR, (void*)&e, &len) < 0) {
       log_warn(LD_BUG, "getsockopt() syscall failed");
-      if (CONN_IS_EDGE(conn))
-        connection_edge_end_errno(TO_EDGE_CONN(conn));
-      connection_mark_for_close(conn);
+      if (conn->type == CONN_TYPE_OR) {
+        or_connection_t *orconn = TO_OR_CONN(conn);
+        connection_or_close_for_error(orconn, 0);
+      } else {
+        if (CONN_IS_EDGE(conn)) {
+          connection_edge_end_errno(TO_EDGE_CONN(conn));
+        }
+        connection_mark_for_close(conn);
+      }
       return -1;
     }
     if (e) {