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 free(conn
->viewer_session
);
35 struct relay_connection
*connection_find_by_sock(struct lttng_ht
*ht
, int sock
)
37 struct lttng_ht_node_ulong
*node
;
38 struct lttng_ht_iter iter
;
39 struct relay_connection
*conn
= NULL
;
44 lttng_ht_lookup(ht
, (void *)((unsigned long) sock
), &iter
);
45 node
= lttng_ht_iter_get_node_ulong(&iter
);
47 DBG2("Relay connection by sock %d not found", sock
);
50 conn
= caa_container_of(node
, struct relay_connection
, sock_n
);
56 void connection_delete(struct lttng_ht
*ht
, struct relay_connection
*conn
)
59 struct lttng_ht_iter iter
;
64 iter
.iter
.node
= &conn
->sock_n
.node
;
65 ret
= lttng_ht_del(ht
, &iter
);
69 void connection_destroy(struct relay_connection
*conn
)
71 struct relay_stream
*stream
, *tmp_stream
;
75 /* Clean up recv list of this connection if any. */
76 cds_list_for_each_entry_safe(stream
, tmp_stream
, &conn
->recv_head
,
78 cds_list_del(&stream
->recv_list
);
81 call_rcu(&conn
->rcu_node
, rcu_free_connection
);
84 struct relay_connection
*connection_create(void)
86 struct relay_connection
*conn
;
88 conn
= zmalloc(sizeof(*conn
));
90 PERROR("zmalloc relay connection");
98 void connection_init(struct relay_connection
*conn
)
103 CDS_INIT_LIST_HEAD(&conn
->recv_head
);
104 lttng_ht_node_init_ulong(&conn
->sock_n
, (unsigned long) conn
->sock
->fd
);
107 void connection_free(struct relay_connection
*conn
)
This page took 0.032408 seconds and 5 git commands to generate.