soup-server: fix a leak in server handlers 97/215797/1 accepted/tizen_5.5_unified accepted/tizen_5.5_unified_mobile_hotfix accepted/tizen_5.5_unified_wearable_hotfix tizen_5.5_mobile_hotfix tizen_5.5_tv tizen_5.5_wearable_hotfix accepted/tizen/5.5/unified/20191031.010710 accepted/tizen/5.5/unified/mobile/hotfix/20201027.073444 accepted/tizen/5.5/unified/wearable/hotfix/20201027.095805 accepted/tizen/unified/20191017.105800 submit/tizen/20191016.074433 submit/tizen_5.5/20191031.000007 submit/tizen_5.5_mobile_hotfix/20201026.185107 submit/tizen_5.5_wearable_hotfix/20201026.184307 tizen_5.5.m2_release
authorSeonah Moon <seonah1.moon@samsung.com>
Wed, 16 Oct 2019 05:07:20 +0000 (14:07 +0900)
committerSeonah Moon <seonah1.moon@samsung.com>
Wed, 16 Oct 2019 05:07:25 +0000 (14:07 +0900)
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
packaging/libsoup.spec

index 07d801d..c6b8ab2 100644 (file)
@@ -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);
        }
 }
index daeb763..9aceed2 100644 (file)
@@ -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