f8315449a31052264847a608a5ef1a399c4ddf12
2 * Copyright (C) 2013 - Julien Desfossez <jdesfossez@efficios.com>
3 * David Goulet <dgoulet@efficios.com>
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License, version 2 only, as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc., 51
16 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include <common/common.h>
22 #include "connection.h"
25 static void rcu_free_connection(struct rcu_head
*head
)
27 struct relay_connection
*conn
=
28 caa_container_of(head
, struct relay_connection
, rcu_node
);
30 lttcomm_destroy_sock(conn
->sock
);
31 connection_free(conn
);
34 struct relay_connection
*connection_find_by_sock(struct lttng_ht
*ht
, int sock
)
36 struct lttng_ht_node_ulong
*node
;
37 struct lttng_ht_iter iter
;
38 struct relay_connection
*conn
= NULL
;
43 lttng_ht_lookup(ht
, (void *)((unsigned long) sock
), &iter
);
44 node
= lttng_ht_iter_get_node_ulong(&iter
);
46 DBG2("Relay connection by sock %d not found", sock
);
49 conn
= caa_container_of(node
, struct relay_connection
, sock_n
);
55 void connection_delete(struct lttng_ht
*ht
, struct relay_connection
*conn
)
58 struct lttng_ht_iter iter
;
63 iter
.iter
.node
= &conn
->sock_n
.node
;
64 ret
= lttng_ht_del(ht
, &iter
);
68 void connection_destroy(struct relay_connection
*conn
)
70 struct relay_stream
*stream
, *tmp_stream
;
74 /* Clean up recv list of this connection if any. */
75 cds_list_for_each_entry_safe(stream
, tmp_stream
, &conn
->recv_head
,
77 cds_list_del(&stream
->recv_list
);
80 call_rcu(&conn
->rcu_node
, rcu_free_connection
);
83 struct relay_connection
*connection_create(void)
85 struct relay_connection
*conn
;
87 conn
= zmalloc(sizeof(*conn
));
89 PERROR("zmalloc relay connection");
97 void connection_init(struct relay_connection
*conn
)
102 CDS_INIT_LIST_HEAD(&conn
->recv_head
);
103 lttng_ht_node_init_ulong(&conn
->sock_n
, (unsigned long) conn
->sock
->fd
);
106 void connection_free(struct relay_connection
*conn
)
110 free(conn
->viewer_session
);
This page took 0.068901 seconds and 3 git commands to generate.