but don't spring the trip on worker children, because it turns

out they don't actually remove anything before freeing the conns.


svn:r3476
This commit is contained in:
Roger Dingledine 2005-01-31 01:02:20 +00:00
parent d6489d8e41
commit 692a57c8e8

View File

@ -140,11 +140,9 @@ connection_t *connection_new(int type) {
* close its socket if necessary, and mark the directory as dirty if <b>conn</b> * close its socket if necessary, and mark the directory as dirty if <b>conn</b>
* is an OR or OP connection. * is an OR or OP connection.
*/ */
void connection_free(connection_t *conn) { static void
tor_assert(conn); _connection_free(connection_t *conn) {
tor_assert(conn->magic == CONNECTION_MAGIC); tor_assert(conn->magic == CONNECTION_MAGIC);
tor_assert(!connection_in_array(conn));
tor_assert(!connection_is_on_closeable_list(conn));
if (!connection_is_listener(conn)) { if (!connection_is_listener(conn)) {
buf_free(conn->inbuf); buf_free(conn->inbuf);
@ -181,9 +179,21 @@ void connection_free(connection_t *conn) {
tor_free(conn); tor_free(conn);
} }
/** Call connection_free() on every connection in our array. /** Make sure <b>conn</b> isn't in any of the global conn lists; then free it.
*/
void connection_free(connection_t *conn) {
tor_assert(conn);
tor_assert(!connection_is_on_closeable_list(conn));
tor_assert(!connection_in_array(conn));
_connection_free(conn);
}
/** Call _connection_free() on every connection in our array.
* This is used by cpuworkers and dnsworkers when they fork, * This is used by cpuworkers and dnsworkers when they fork,
* so they don't keep resources held open (especially sockets). * so they don't keep resources held open (especially sockets).
*
* Don't do the checks in connection_free(), because they will
* fail.
*/ */
void connection_free_all(void) { void connection_free_all(void) {
int i, n; int i, n;
@ -191,7 +201,7 @@ void connection_free_all(void) {
get_connection_array(&carray,&n); get_connection_array(&carray,&n);
for (i=0;i<n;i++) for (i=0;i<n;i++)
connection_free(carray[i]); _connection_free(carray[i]);
} }
/** Do any cleanup needed: /** Do any cleanup needed: