diff options
author | Nick Mathewson <nickm@torproject.org> | 2010-10-13 13:08:38 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2010-10-13 13:08:46 -0400 |
commit | a0c1c2ac012fded493c0d8c49fe57e56373b061f (patch) | |
tree | b39fcdda6348700e02ce17c18b3221c0b1f64fcd | |
parent | 5710d99f00b3ac7cef0691fc9153993b0f4aa872 (diff) | |
download | tor-a0c1c2ac012fded493c0d8c49fe57e56373b061f.tar.gz tor-a0c1c2ac012fded493c0d8c49fe57e56373b061f.zip |
Use connection_mark_and_flush consistently.
-rw-r--r-- | src/or/connection.h | 10 | ||||
-rw-r--r-- | src/or/connection_edge.c | 5 | ||||
-rw-r--r-- | src/or/control.c | 10 | ||||
-rw-r--r-- | src/or/main.c | 3 | ||||
-rw-r--r-- | src/or/routerlist.c | 10 |
5 files changed, 20 insertions, 18 deletions
diff --git a/src/or/connection.h b/src/or/connection.h index 004ede5d04..dc8c5df812 100644 --- a/src/or/connection.h +++ b/src/or/connection.h @@ -34,15 +34,21 @@ void _connection_mark_for_close(connection_t *conn,int line, const char *file); #define connection_mark_for_close(c) \ _connection_mark_for_close((c), __LINE__, _SHORT_FILE_) -#define connection_mark_and_flush(c) \ +/** + * Mark 'c' for close, but try to hold it open until all the data is written. + */ +#define _connection_mark_and_flush(c,line,file) \ do { \ connection_t *tmp_conn_ = (c); \ - _connection_mark_for_close(tmp_conn_, __LINE__, _SHORT_FILE_); \ + _connection_mark_for_close(tmp_conn_, (line), (file)); \ tmp_conn_->hold_open_until_flushed = 1; \ IF_HAS_BUFFEREVENT(tmp_conn_, \ connection_start_writing(tmp_conn_)); \ } while (0) +#define connection_mark_and_flush(c) \ + _connection_mark_and_flush((c), __LINE__, _SHORT_FILE_) + void connection_expire_held_open(void); int connection_connect(connection_t *conn, const char *address, diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 9627631ad9..be6428dc15 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -90,9 +90,8 @@ _connection_mark_unattached_ap(edge_connection_t *conn, int endreason, conn->socks_request->has_finished = 1; } - _connection_mark_for_close(TO_CONN(conn), line, file); - conn->_base.hold_open_until_flushed = 1; - IF_HAS_BUFFEREVENT(TO_CONN(conn), connection_start_writing(TO_CONN(conn))); + _connection_mark_and_flush(TO_CONN(conn), line, file); + conn->end_reason = endreason; } diff --git a/src/or/control.c b/src/or/control.c index 37ebfd88dc..4c32b5b147 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -2798,8 +2798,8 @@ connection_control_process_inbuf(control_connection_t *conn) body_len = 2+strlen(buf+6)+2; /* code, msg, nul. */ set_uint16(buf+0, htons(body_len)); connection_write_to_buf(buf, 4+body_len, TO_CONN(conn)); - connection_mark_for_close(TO_CONN(conn)); - conn->_base.hold_open_until_flushed = 1; + + connection_mark_and_flush(TO_CONN(conn)); return 0; } @@ -2820,8 +2820,7 @@ connection_control_process_inbuf(control_connection_t *conn) if (data_len + conn->incoming_cmd_cur_len > MAX_COMMAND_LINE_LENGTH) { connection_write_str_to_buf("500 Line too long.\r\n", conn); connection_stop_reading(TO_CONN(conn)); - connection_mark_for_close(TO_CONN(conn)); - conn->_base.hold_open_until_flushed = 1; + connection_mark_and_flush(TO_CONN(conn)); } while (conn->incoming_cmd_len < data_len+conn->incoming_cmd_cur_len) conn->incoming_cmd_len *= 2; @@ -2880,8 +2879,7 @@ connection_control_process_inbuf(control_connection_t *conn) /* Otherwise, Quit is always valid. */ if (!strcasecmp(conn->incoming_cmd, "QUIT")) { connection_write_str_to_buf("250 closing connection\r\n", conn); - connection_mark_for_close(TO_CONN(conn)); - conn->_base.hold_open_until_flushed = 1; + connection_mark_and_flush(TO_CONN(conn)); return 0; } diff --git a/src/or/main.c b/src/or/main.c index ddd5da3643..2562c21cdc 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -949,8 +949,7 @@ run_connection_housekeeping(int i, time_t now) connection_or_connect_failed(TO_OR_CONN(conn), END_OR_CONN_REASON_TIMEOUT, "Tor gave up on the connection"); - connection_mark_for_close(conn); - conn->hold_open_until_flushed = 1; + connection_mark_and_flush(conn); } else if (!connection_state_is_open(conn)) { if (past_keepalive) { /* We never managed to actually get this connection open and happy. */ diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 43be8346cc..bf2a5a5a45 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -3216,13 +3216,13 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg, /* Make sure that we haven't already got this exact descriptor. */ if (sdmap_get(routerlist->desc_digest_map, router->cache_info.signed_descriptor_digest)) { - /* If we have this descriptor already and the new descriptor is a bridge + /* If we have this descriptor already but the new descriptor is a bridge * descriptor, replace it. If we had a bridge descriptor before and the * new one is not a bridge descriptor, don't replace it. */ - tor_assert(old_router); - if (! (routerinfo_is_a_configured_bridge(router) && - (router->purpose == ROUTER_PURPOSE_BRIDGE || - old_router->purpose != ROUTER_PURPOSE_BRIDGE))) { + const int had_as_bridge = old_router && + old_router->purpose == ROUTER_PURPOSE_BRIDGE; + if (! routerinfo_is_a_configured_bridge(router) || + (router->purpose != ROUTER_PURPOSE_BRIDGE && had_as_bridge)) { log_info(LD_DIR, "Dropping descriptor that we already have for router '%s'", router->nickname); |