[tor-commits] [obfsproxy/master] Actual solution to bug5072
nickm at torproject.org
nickm at torproject.org
Sat Feb 11 17:05:36 UTC 2012
commit c52bf0c5c047bdfddf01c1d3e2772c5b0687f69a
Author: Nick Mathewson <nickm at torproject.org>
Date: Sat Feb 11 11:24:03 2012 -0500
Actual solution to bug5072
When we were setting the flush callback on bev_flush, we were passing
the wrong conn_t as the argument.
---
src/network.c | 15 ++++++++-------
1 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/src/network.c b/src/network.c
index b9bcbb0..27eb2ee 100644
--- a/src/network.c
+++ b/src/network.c
@@ -768,6 +768,7 @@ static void
error_or_eof(conn_t *conn)
{
circuit_t *circ = conn->circuit;
+ conn_t *conn_flush;
struct bufferevent *bev_err = conn->buffer;
struct bufferevent *bev_flush;
@@ -778,8 +779,9 @@ error_or_eof(conn_t *conn)
return;
}
- bev_flush = (conn == circ->upstream) ? circ->downstream->buffer
- : circ->upstream->buffer;
+ conn_flush = (conn == circ->upstream) ? circ->downstream
+ : circ->upstream;
+ bev_flush = conn_flush->buffer;
if (evbuffer_get_length(bufferevent_get_output(bev_flush)) == 0) {
conn_free(conn);
return;
@@ -792,11 +794,10 @@ error_or_eof(conn_t *conn)
bufferevent_disable(bev_err, EV_READ|EV_WRITE);
bufferevent_setcb(bev_err, NULL, NULL, flush_error_cb, conn);
- /* XXX Dirty access to bufferevent guts. There appears to be no
- official API to retrieve the callback functions and/or change
- just one callback while leaving the others intact. */
- bufferevent_setcb(bev_flush, bev_flush->readcb,
- conn_free_on_flush, flush_error_cb, conn);
+ /* We can ignore any data that arrives; we should free the connection
+ * when we're done flushing */
+ bufferevent_setcb(bev_flush, NULL,
+ conn_free_on_flush, flush_error_cb, conn_flush);
}
/**
More information about the tor-commits
mailing list