[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] [tor/master] Use connection_mark_and_flush consistently.
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Wed, 13 Oct 2010 13:08:38 -0400
Subject: Use connection_mark_and_flush consistently.
Commit: a0c1c2ac012fded493c0d8c49fe57e56373b061f
---
src/or/connection.h | 10 ++++++++--
src/or/connection_edge.c | 5 ++---
src/or/control.c | 10 ++++------
src/or/main.c | 3 +--
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 004ede5..dc8c5df 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 9627631..be6428d 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 37ebfd8..4c32b5b 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 ddd5da3..2562c21 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 43be834..bf2a5a5 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);
--
1.7.1