|
|
39f53b |
From 21fbcf665a7ad6b761e9342d116657d5c2353592 Mon Sep 17 00:00:00 2001
|
|
|
39f53b |
From: Frediano Ziglio <freddy77@gmail.com>
|
|
|
39f53b |
Date: Mon, 21 Sep 2020 07:00:39 +0100
|
|
|
39f53b |
Subject: [PATCH vd_agent_linux 06/17] vdagentd: Automatically release
|
|
|
39f53b |
"agent_data"
|
|
|
39f53b |
MIME-Version: 1.0
|
|
|
39f53b |
Content-Type: text/plain; charset=UTF-8
|
|
|
39f53b |
Content-Transfer-Encoding: 8bit
|
|
|
39f53b |
|
|
|
39f53b |
It's not guaranteed that agent_disconnect will release the connection
|
|
|
39f53b |
so avoid to have a dandling pointer.
|
|
|
39f53b |
|
|
|
39f53b |
Signed-off-by: Frediano Ziglio <freddy77@gmail.com>
|
|
|
39f53b |
Acked-by: Jakub Janků <jjanku@redhat.com>
|
|
|
39f53b |
---
|
|
|
39f53b |
src/vdagentd/vdagentd.c | 17 ++++++++++-------
|
|
|
39f53b |
1 file changed, 10 insertions(+), 7 deletions(-)
|
|
|
39f53b |
|
|
|
39f53b |
diff --git a/src/vdagentd/vdagentd.c b/src/vdagentd/vdagentd.c
|
|
|
39f53b |
index 051de74..94b8681 100644
|
|
|
39f53b |
--- a/src/vdagentd/vdagentd.c
|
|
|
39f53b |
+++ b/src/vdagentd/vdagentd.c
|
|
|
39f53b |
@@ -86,6 +86,13 @@ static uint32_t clipboard_serial[256];
|
|
|
39f53b |
|
|
|
39f53b |
static GMainLoop *loop;
|
|
|
39f53b |
|
|
|
39f53b |
+static void agent_data_destroy(struct agent_data *agent_data)
|
|
|
39f53b |
+{
|
|
|
39f53b |
+ g_free(agent_data->session);
|
|
|
39f53b |
+ g_free(agent_data->screen_info);
|
|
|
39f53b |
+ g_free(agent_data);
|
|
|
39f53b |
+}
|
|
|
39f53b |
+
|
|
|
39f53b |
static void vdagentd_quit(gint exit_code)
|
|
|
39f53b |
{
|
|
|
39f53b |
retval = exit_code;
|
|
|
39f53b |
@@ -930,7 +937,7 @@ static void agent_connect(UdscsConnection *conn)
|
|
|
39f53b |
syslog(LOG_ERR, "Could not get peer PID, disconnecting new client: %s",
|
|
|
39f53b |
err->message);
|
|
|
39f53b |
g_error_free(err);
|
|
|
39f53b |
- g_free(agent_data);
|
|
|
39f53b |
+ agent_data_destroy(agent_data);
|
|
|
39f53b |
udscs_server_destroy_connection(server, conn);
|
|
|
39f53b |
return;
|
|
|
39f53b |
}
|
|
|
39f53b |
@@ -938,7 +945,8 @@ static void agent_connect(UdscsConnection *conn)
|
|
|
39f53b |
agent_data->session = session_info_session_for_pid(session_info, pid);
|
|
|
39f53b |
}
|
|
|
39f53b |
|
|
|
39f53b |
- g_object_set_data(G_OBJECT(conn), "agent_data", agent_data);
|
|
|
39f53b |
+ g_object_set_data_full(G_OBJECT(conn), "agent_data", agent_data,
|
|
|
39f53b |
+ (GDestroyNotify) agent_data_destroy);
|
|
|
39f53b |
udscs_write(conn, VDAGENTD_VERSION, 0, 0,
|
|
|
39f53b |
(uint8_t *)VERSION, strlen(VERSION) + 1);
|
|
|
39f53b |
update_active_session_connection(conn);
|
|
|
39f53b |
@@ -951,13 +959,8 @@ static void agent_connect(UdscsConnection *conn)
|
|
|
39f53b |
|
|
|
39f53b |
static void agent_disconnect(VDAgentConnection *conn, GError *err)
|
|
|
39f53b |
{
|
|
|
39f53b |
- struct agent_data *agent_data = g_object_get_data(G_OBJECT(conn), "agent_data");
|
|
|
39f53b |
-
|
|
|
39f53b |
g_hash_table_foreach_remove(active_xfers, remove_active_xfers, conn);
|
|
|
39f53b |
|
|
|
39f53b |
- g_clear_pointer(&agent_data->session, g_free);
|
|
|
39f53b |
- g_free(agent_data->screen_info);
|
|
|
39f53b |
- g_free(agent_data);
|
|
|
39f53b |
if (err) {
|
|
|
39f53b |
syslog(LOG_ERR, "%s", err->message);
|
|
|
39f53b |
g_error_free(err);
|
|
|
39f53b |
--
|
|
|
39f53b |
2.26.2
|
|
|
39f53b |
|