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.
21 #include <common/common.h>
23 #include "connection.h"
26 static void rcu_free_connection(struct rcu_head
*head
)
28 struct relay_connection
*conn
=
29 caa_container_of(head
, struct relay_connection
, rcu_node
);
31 lttcomm_destroy_sock(conn
->sock
);
32 connection_free(conn
);
36 * Must be called with a read side lock held. The read side lock must be
37 * kept until the returned relay_connection is no longer in use.
39 struct relay_connection
*connection_find_by_sock(struct lttng_ht
*ht
, int sock
)
41 struct lttng_ht_node_ulong
*node
;
42 struct lttng_ht_iter iter
;
43 struct relay_connection
*conn
= NULL
;
48 lttng_ht_lookup(ht
, (void *)((unsigned long) sock
), &iter
);
49 node
= lttng_ht_iter_get_node_ulong(&iter
);
51 DBG2("Relay connection by sock %d not found", sock
);
54 conn
= caa_container_of(node
, struct relay_connection
, sock_n
);
60 void connection_delete(struct lttng_ht
*ht
, struct relay_connection
*conn
)
63 struct lttng_ht_iter iter
;
68 iter
.iter
.node
= &conn
->sock_n
.node
;
69 ret
= lttng_ht_del(ht
, &iter
);
73 void connection_destroy(struct relay_connection
*conn
)
77 call_rcu(&conn
->rcu_node
, rcu_free_connection
);
80 struct relay_connection
*connection_create(void)
82 struct relay_connection
*conn
;
84 conn
= zmalloc(sizeof(*conn
));
86 PERROR("zmalloc relay connection");
94 void connection_init(struct relay_connection
*conn
)
99 CDS_INIT_LIST_HEAD(&conn
->recv_head
);
100 lttng_ht_node_init_ulong(&conn
->sock_n
, (unsigned long) conn
->sock
->fd
);
103 void connection_free(struct relay_connection
*conn
)
107 free(conn
->viewer_session
);
This page took 0.031637 seconds and 4 git commands to generate.