Merge branch 'maint-0.3.5'

This commit is contained in:
Nick Mathewson 2018-12-21 15:42:58 -05:00
commit 99713b176b
2 changed files with 20 additions and 3 deletions

6
changes/ticket28912 Normal file
View File

@ -0,0 +1,6 @@
o Major bugfixes (relay, directory):
- A connection serving directory information wouldn't get reactivated after
the first chunk of data was sent (usually 32KB). Tor now always activate
the main loop event that goes through these connections as long as at
least one connection is still active. Fixes bug 28912; bugfix on
0.3.4.1-alpha. Patch by "cypherpunks3".

View File

@ -377,6 +377,9 @@ connection_unlink(connection_t *conn)
connection_free(conn);
}
/** Event that invokes schedule_active_linked_connections_cb. */
static mainloop_event_t *schedule_active_linked_connections_event = NULL;
/**
* Callback: used to activate read events for all linked connections, so
* libevent knows to call their read callbacks. This callback run as a
@ -393,10 +396,18 @@ schedule_active_linked_connections_cb(mainloop_event_t *event, void *arg)
* so that libevent knows to run their callbacks. */
SMARTLIST_FOREACH(active_linked_connection_lst, connection_t *, conn,
event_active(conn->read_event, EV_READ, 1));
}
/** Event that invokes schedule_active_linked_connections_cb. */
static mainloop_event_t *schedule_active_linked_connections_event = NULL;
/* Reactivate the event if we still have connections in the active list.
*
* A linked connection doesn't get woken up by I/O but rather artificially
* by this event callback. It has directory data spooled in it and it is
* sent incrementally by small chunks unless spool_eagerly is true. For that
* to happen, we need to induce the activation of the read event so it can
* be flushed. */
if (smartlist_len(active_linked_connection_lst)) {
mainloop_event_activate(schedule_active_linked_connections_event);
}
}
/** Initialize the global connection list, closeable connection list,
* and active connection list. */