[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