From 7e83c2dd89bc4fcbbc823eaa53a335013dbd4343 Mon Sep 17 00:00:00 2001 From: Seonah Moon Date: Wed, 16 Oct 2019 14:07:20 +0900 Subject: soup-server: fix a leak in server handlers If a SoupServer handler specified a GDestroyNotify, it would only get run when explicitly removing the handler, not when freeing the server. Fix. https://gitlab.gnome.org/GNOME/libsoup/commit/37c8e71c0e4a080207575b9a16a632fe6e6071b0 Change-Id: I4de7b2ebc7e31a70d8c4c5d269af33b1767f9f1a --- libsoup/soup-server.c | 22 ++++------------------ packaging/libsoup.spec | 2 +- 2 files changed, 5 insertions(+), 19 deletions(-) diff --git a/libsoup/soup-server.c b/libsoup/soup-server.c index 07d801d1..c6b8ab2f 100644 --- a/libsoup/soup-server.c +++ b/libsoup/soup-server.c @@ -137,6 +137,8 @@ static void free_handler (SoupServerHandler *hand) { g_free (hand->path); + if (hand->destroy) + hand->destroy (hand->user_data); g_slice_free (SoupServerHandler, hand); } @@ -1456,13 +1458,6 @@ soup_server_add_handler (SoupServer *server, priv->default_handler = hand; } -static void -unregister_handler (SoupServerHandler *handler) -{ - if (handler->destroy) - handler->destroy (handler->user_data); -} - /** * soup_server_remove_handler: * @server: a #SoupServer @@ -1474,23 +1469,14 @@ void soup_server_remove_handler (SoupServer *server, const char *path) { SoupServerPrivate *priv; - SoupServerHandler *hand; g_return_if_fail (SOUP_IS_SERVER (server)); priv = SOUP_SERVER_GET_PRIVATE (server); if (!path || !*path || !strcmp (path, "/")) { - if (priv->default_handler) { - unregister_handler (priv->default_handler); - free_handler (priv->default_handler); - priv->default_handler = NULL; - } + g_clear_pointer (&priv->default_handler, free_handler); return; - } - - hand = soup_path_map_lookup (priv->handlers, path); - if (hand && !strcmp (path, hand->path)) { - unregister_handler (hand); + } else { soup_path_map_remove (priv->handlers, path); } } diff --git a/packaging/libsoup.spec b/packaging/libsoup.spec index daeb7634..9aceed29 100644 --- a/packaging/libsoup.spec +++ b/packaging/libsoup.spec @@ -3,7 +3,7 @@ Name: libsoup Version: 2.46.0 -Release: 0 +Release: 1 License: LGPL-2.0+ Summary: HTTP client/server library for GNOME Url: http://www.gnome.org -- cgit v1.2.3