mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
avoid racing the mark-for-close when the client hangs up on us
at the same time we get an end relay cell. (thanks to wmf for reminding me) svn:r2181
This commit is contained in:
@@ -54,7 +54,11 @@ int connection_edge_process_inbuf(connection_t *conn) {
|
||||
/* eof reached, kill it. */
|
||||
log_fn(LOG_INFO,"conn (fd %d) reached eof. Closing.", conn->s);
|
||||
connection_edge_end(conn, END_STREAM_REASON_DONE, conn->cpath_layer);
|
||||
connection_mark_for_close(conn);
|
||||
if(!conn->marked_for_close) {
|
||||
/* only mark it if not already marked. it's possible to
|
||||
* get the 'end' right around when the client hangs up on us. */
|
||||
connection_mark_for_close(conn);
|
||||
}
|
||||
conn->hold_open_until_flushed = 1; /* just because we shouldn't read
|
||||
doesn't mean we shouldn't write */
|
||||
return 0;
|
||||
|
||||
@@ -694,7 +694,11 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
|
||||
#else
|
||||
/* We just *got* an end; no reason to send one. */
|
||||
conn->has_sent_end = 1;
|
||||
connection_mark_for_close(conn);
|
||||
if(!conn->marked_for_close) {
|
||||
/* only mark it if not already marked. it's possible to
|
||||
* get the 'end' right around when the client hangs up on us. */
|
||||
connection_mark_for_close(conn);
|
||||
}
|
||||
conn->hold_open_until_flushed = 1;
|
||||
#endif
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user