Commit 2cb82c33 authored by Andrea Shepard's avatar Andrea Shepard
Browse files
parents 02a43e5e 3db3daa6
- Major bugfixes
o Call channel_mark_for_close() rather than connection_mark_for_close()
in hibernate_go_dormant() when closing an or_connection_t. Fixes bug
7267.
......@@ -1057,6 +1057,19 @@ channel_set_cell_handlers(channel_t *chan,
chan->var_cell_handler)) channel_process_cells(chan);
}
/*
* On closing channels
*
* There are three functions that close channels, for use in
* different circumstances:
*
* - Use channel_mark_for_close() for most cases
* - Use channel_close_from_lower_layer() if you are connection_or.c
* and the other end closes the underlying connection.
* - Use channel_close_for_error() if you are connection_or.c and
* some sort of error has occurred.
*/
/**
* Mark a channel for closure
*
......
......@@ -23,6 +23,8 @@ hibernating, phase 2:
#define HIBERNATE_PRIVATE
#include "or.h"
#include "channel.h"
#include "channeltls.h"
#include "config.h"
#include "connection.h"
#include "connection_edge.h"
......@@ -846,7 +848,13 @@ hibernate_go_dormant(time_t now)
if (conn->type == CONN_TYPE_AP) /* send socks failure if needed */
connection_mark_unattached_ap(TO_ENTRY_CONN(conn),
END_STREAM_REASON_HIBERNATING);
else
else if (conn->type == CONN_TYPE_OR) {
if (TO_OR_CONN(conn)->chan) {
channel_mark_for_close(TLS_CHAN_TO_BASE(TO_OR_CONN(conn)->chan));
} else {
connection_mark_for_close(conn);
}
} else
connection_mark_for_close(conn);
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment