[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [tor/master] Check for orconns and use connection_or_close_for_error() when appropriate in connection_handle_write_impl()



commit 65a0f895c7dd913071bcba5f1876ccf3b1286892
Author: Andrea Shepard <andrea@xxxxxxxxxxxxxx>
Date:   Tue Apr 15 23:03:16 2014 -0700

    Check for orconns and use connection_or_close_for_error() when appropriate in connection_handle_write_impl()
---
 changes/bug11302    |    4 ++++
 src/or/connection.c |   12 +++++++++---
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/changes/bug11302 b/changes/bug11302
new file mode 100644
index 0000000..7416c69
--- /dev/null
+++ b/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.
diff --git a/src/or/connection.c b/src/or/connection.c
index 1be4c45..33b7d31 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -3705,9 +3705,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) {



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits