mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
tools/xenstore: add helpers to free struct buffered_data
Add two helpers for freeing struct buffered_data: free_buffered_data()
for freeing one instance and conn_free_buffered_data() for freeing all
instances for a connection.
This is avoiding duplicated code and will help later when more actions
are needed when freeing a struct buffered_data.
This is part of XSA-326.
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Julien Grall <jgrall@amazon.com>
(cherry picked from commit ead062a68a)
This commit is contained in:
1 parent
00240cfc5e
commit
3530aa6aca
3 files changed
+20
-15
No files matched your search
@@ -208,6 +208,21 @@ void reopen_log(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void free_buffered_data(struct buffered_data *out,
|
||||
struct connection *conn)
|
||||
{
|
||||
list_del(&out->list);
|
||||
talloc_free(out);
|
||||
}
|
||||
|
||||
void conn_free_buffered_data(struct connection *conn)
|
||||
{
|
||||
struct buffered_data *out;
|
||||
|
||||
while ((out = list_top(&conn->out_list, struct buffered_data, list)))
|
||||
free_buffered_data(out, conn);
|
||||
}
|
||||
|
||||
static bool write_messages(struct connection *conn)
|
||||
{
|
||||
int ret;
|
||||
@@ -251,8 +266,7 @@ static bool write_messages(struct connection *conn)
|
||||
|
||||
trace_io(conn, out, 1);
|
||||
|
||||
list_del(&out->list);
|
||||
talloc_free(out);
|
||||
free_buffered_data(out, conn);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1391,18 +1405,12 @@ static struct {
|
||||
*/
|
||||
static void ignore_connection(struct connection *conn)
|
||||
{
|
||||
struct buffered_data *out, *tmp;
|
||||
|
||||
trace("CONN %p ignored\n", conn);
|
||||
|
||||
conn->is_ignored = true;
|
||||
conn_delete_all_watches(conn);
|
||||
conn_delete_all_transactions(conn);
|
||||
|
||||
list_for_each_entry_safe(out, tmp, &conn->out_list, list) {
|
||||
list_del(&out->list);
|
||||
talloc_free(out);
|
||||
}
|
||||
conn_free_buffered_data(conn);
|
||||
|
||||
talloc_free(conn->in);
|
||||
conn->in = NULL;
|
||||
|
||||
@@ -226,6 +226,8 @@ extern xengnttab_handle **xgt_handle;
|
||||
|
||||
int remember_string(struct hashtable *hash, const char *str);
|
||||
|
||||
void conn_free_buffered_data(struct connection *conn);
|
||||
|
||||
#endif /* _XENSTORED_CORE_H */
|
||||
|
||||
/*
|
||||
|
||||
@@ -402,15 +402,10 @@ static struct domain *find_domain_by_domid(unsigned int domid)
|
||||
static void domain_conn_reset(struct domain *domain)
|
||||
{
|
||||
struct connection *conn = domain->conn;
|
||||
struct buffered_data *out;
|
||||
|
||||
conn_delete_all_watches(conn);
|
||||
conn_delete_all_transactions(conn);
|
||||
|
||||
while ((out = list_top(&conn->out_list, struct buffered_data, list))) {
|
||||
list_del(&out->list);
|
||||
talloc_free(out);
|
||||
}
|
||||
conn_free_buffered_data(conn);
|
||||
|
||||
talloc_free(conn->in);
|
||||
|
||||
|
||||