Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP2:Update
spice-vdagent
vdagentd-Automatically-release-agent_data.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File vdagentd-Automatically-release-agent_data.patch of Package spice-vdagent
From adc7b4a87e82e20a89ba6c047879a36515d33fde Mon Sep 17 00:00:00 2001 From: Frediano Ziglio <freddy77@gmail.com> Date: Mon, 21 Sep 2020 07:00:39 +0100 Subject: [PATCH 09/20] vdagentd: Automatically release "agent_data" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Git-commit: b4479eb9b0a30cf99806a17bcbdc468828727e89 References: bsc#1173749 It's not guaranteed that agent_disconnect will release the connection so avoid to have a dandling pointer. Signed-off-by: Frediano Ziglio <freddy77@gmail.com> Acked-by: Jakub Janků <jjanku@redhat.com> Signed-off-by: Bruce Rogers <brogers@suse.com> --- src/vdagentd/vdagentd.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/vdagentd/vdagentd.c b/src/vdagentd/vdagentd.c index 9b508d2..c5a2fe7 100644 --- a/src/vdagentd/vdagentd.c +++ b/src/vdagentd/vdagentd.c @@ -85,6 +85,13 @@ static int max_clipboard = -1; static GMainLoop *loop; +static void agent_data_destroy(struct agent_data *agent_data) +{ + g_free(agent_data->session); + g_free(agent_data->screen_info); + g_free(agent_data); +} + static void vdagentd_quit(gint exit_code) { retval = exit_code; @@ -891,7 +898,7 @@ static void agent_connect(struct udscs_connection *conn) syslog(LOG_ERR, "Could not get peer PID, disconnecting new client: %s", err->message); g_error_free(err); - g_free(agent_data); + agent_data_destroy(agent_data); udscs_server_destroy_connection(server, conn); return; } @@ -899,7 +906,8 @@ static void agent_connect(struct udscs_connection *conn) agent_data->session = session_info_session_for_pid(session_info, pid); } - g_object_set_data(G_OBJECT(conn), "agent_data", agent_data); + g_object_set_data_full(G_OBJECT(conn), "agent_data", agent_data, + (GDestroyNotify) agent_data_destroy); udscs_write(conn, VDAGENTD_VERSION, 0, 0, (uint8_t *)VERSION, strlen(VERSION) + 1); update_active_session_connection(conn); @@ -912,13 +920,8 @@ static void agent_connect(struct udscs_connection *conn) static void agent_disconnect(VDAgentConnection *conn, GError *err) { - struct agent_data *agent_data = g_object_get_data(G_OBJECT(conn), "agent_data"); - g_hash_table_foreach_remove(active_xfers, remove_active_xfers, conn); - g_clear_pointer(&agent_data->session, g_free); - g_free(agent_data->screen_info); - g_free(agent_data); if (err) { syslog(LOG_ERR, "%s", err->message); g_error_free(err); -- 2.29.0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor