[Spice-devel] [PATCH 1/9] Use spice_server_destroy() at exit
Jonathon Jongsma
jjongsma at redhat.com
Fri Oct 28 17:06:21 UTC 2016
The destructor function was calling reds_cleanup() for each server at
application exit. But reds_cleanup() only cleans up a couple of
statistics-related variables. We should actually free the servers by
calling spice_server_destroy(). This left reds_cleanup() unused, so the
contents of this function were moved inside spice_server_destroy().
---
server/reds.c | 30 ++++++++++++------------------
1 file changed, 12 insertions(+), 18 deletions(-)
diff --git a/server/reds.c b/server/reds.c
index eeb6010..c03ed18 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -2904,27 +2904,14 @@ static int reds_init_ssl(RedsState *reds)
return 0;
}
-static void reds_cleanup(RedsState *reds)
-{
-#ifdef RED_STATISTICS
- if (reds->stat_shm_name) {
- shm_unlink(reds->stat_shm_name);
- free(reds->stat_shm_name);
- reds->stat_shm_name = NULL;
- }
-#endif
-}
-
SPICE_DESTRUCTOR_FUNC(reds_exit)
{
- GList *l;
+ GListIter iter;
+ RedsState *reds;
- pthread_mutex_lock(&global_reds_lock);
- for (l = servers; l != NULL; l = l->next) {
- RedsState *reds = l->data;
- reds_cleanup(reds);
+ GLIST_FOREACH(servers, iter, RedsState, reds) {
+ spice_server_destroy(reds);
}
- pthread_mutex_unlock(&global_reds_lock);
}
static inline void on_activating_ticketing(RedsState *reds)
@@ -3695,7 +3682,14 @@ SPICE_GNUC_VISIBLE void spice_server_destroy(SpiceServer *reds)
if (reds->main_channel) {
main_channel_close(reds->main_channel);
}
- reds_cleanup(reds);
+
+#ifdef RED_STATISTICS
+ if (reds->stat_shm_name) {
+ shm_unlink(reds->stat_shm_name);
+ free(reds->stat_shm_name);
+ reds->stat_shm_name = NULL;
+ }
+#endif
/* remove the server from the list of servers so that we don't attempt to
* free it again at exit */
--
2.7.4
More information about the Spice-devel
mailing list