|
@@ -506,7 +506,7 @@ int connection_handle_write(connection_t *conn) {
|
|
|
} else {
|
|
|
if(flush_buf(conn->s, conn->outbuf, &conn->outbuf_flushlen) < 0)
|
|
|
return -1;
|
|
|
- /* conns in CONNECTING state will fall through... */
|
|
|
+ /* conns in CONNECTING state will fall through... */
|
|
|
}
|
|
|
|
|
|
if(!connection_wants_to_flush(conn)) /* it's done flushing */
|
|
@@ -527,9 +527,8 @@ void connection_write_to_buf(const char *string, int len, connection_t *conn) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- /* XXX if linkpadding, this only applies to conns that aren't open OR connections */
|
|
|
connection_start_writing(conn);
|
|
|
-#define MIN_TLS_FLUSHLEN 16300
|
|
|
+#define MIN_TLS_FLUSHLEN 15872
|
|
|
/* openssl tls record size is 16383, this is close. The goal here is to
|
|
|
* push data out as soon as we know there's enough for a tls record, so
|
|
|
* during periods of high load we won't read the entire megabyte from
|
|
@@ -544,7 +543,11 @@ void connection_write_to_buf(const char *string, int len, connection_t *conn) {
|
|
|
log_fn(LOG_WARN,"flushing failed.");
|
|
|
}
|
|
|
}
|
|
|
- conn->outbuf_flushlen += len;
|
|
|
+ if(len > 0) { /* if there's any left over */
|
|
|
+ conn->outbuf_flushlen += len;
|
|
|
+ connection_start_writing(conn);
|
|
|
+ /* because connection_handle_write() above might have stopped writing */
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
connection_t *connection_exact_get_by_addr_port(uint32_t addr, uint16_t port) {
|
|
@@ -758,6 +761,10 @@ void assert_connection_ok(connection_t *conn, time_t now)
|
|
|
assert(conn->type >= _CONN_TYPE_MIN);
|
|
|
assert(conn->type <= _CONN_TYPE_MAX);
|
|
|
|
|
|
+ if(conn->outbuf_flushlen > 0) {
|
|
|
+ assert(connection_is_writing(conn) || conn->wants_to_write);
|
|
|
+ }
|
|
|
+
|
|
|
/* XXX check: wants_to_read, wants_to_write, s, poll_index,
|
|
|
* marked_for_close. */
|
|
|
|