Skip to content
Snippets Groups Projects
Commit 2cb82c33 authored by Andrea Shepard's avatar Andrea Shepard
Browse files
parents 02a43e5e 3db3daa6
No related branches found
No related tags found
No related merge requests found
- 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);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment