From 793726aa7c26be87ef11799c046340e198e3d5f9 Mon Sep 17 00:00:00 2001 From: sergiotarxz Date: Sat, 20 Nov 2021 17:24:24 +0100 Subject: [PATCH] Memory cleanup. --- src/backend/readmng.c | 29 ++++++++++++++++++++++++----- src/manga.c | 15 ++++++++++++--- src/util/xml.c | 2 ++ src/view/detail_manga.c | 1 + src/view/main_view.c | 8 +++----- src/view/picture.c | 1 + 6 files changed, 43 insertions(+), 13 deletions(-) diff --git a/src/backend/readmng.c b/src/backend/readmng.c index faf10b6..95363d7 100644 --- a/src/backend/readmng.c +++ b/src/backend/readmng.c @@ -267,7 +267,9 @@ mg_backend_readmng_retrieve_manga_details (MgBackendReadmng *self, mg_manga_set_chapter_list (manga, manga_chapters); mg_manga_details_recovered (manga); cleanup_mg_backend_readmng_retrieve_manga_details: - g_free (movie_detail); + if (movie_detail) { + g_free (movie_detail); + } } static GListStore * @@ -369,10 +371,12 @@ mg_backend_readmng_fetch_xml_details (MgBackendReadmng *self, request_url_len = snprintf ( NULL, 0, "%s/%s/", self->base_url, manga_id); request_url = mg_util_string_alloc_string (string_util, request_url_len); snprintf ( request_url, request_url_len+1, "%s/%s/", self->base_url, manga_id); + g_free (manga_id); char *html_response = mg_util_soup_get_request (util_soup, request_url, &response_len); - g_object_unref (util_soup); + g_clear_object (&util_soup); + g_clear_object (&string_util); return htmlReadMemory (html_response, response_len, NULL, NULL, HTML_PARSE_RECOVER | HTML_PARSE_NODEFDTD | HTML_PARSE_NOERROR | HTML_PARSE_NOWARNING ); @@ -475,7 +479,9 @@ mg_backend_readmng_retrieve_slides (MgBackendReadmng *self, const xmlDocPtr html xmlXPathFreeObject(xpath_result); } cleanup_mg_backend_readmng_retrieve_slides: - g_free (nodes); + if (nodes) { + g_free (nodes); + } return slides; } @@ -483,10 +489,16 @@ static xmlNodePtr mg_backend_readmng_retrieve_thumbnail_from_li (MgBackendReadmng *self, xmlNodePtr current_li) { size_t thumbnail_len = 0; MgUtilXML *xml_utils = self->xml_utils; + xmlNodePtr return_value = NULL; xmlNodePtr *thumbnail = mg_util_xml_find_class (xml_utils, current_li, "thumbnail", &thumbnail_len, NULL, 1); - if (thumbnail_len) return thumbnail[0]; - return NULL; + if (!thumbnail_len) goto cleanup_mg_backend_retrieve_thumbnail_from_li; + return_value = thumbnail[0]; +cleanup_mg_backend_retrieve_thumbnail_from_li: + if (thumbnail) { + g_free (thumbnail); + } + return return_value; } static xmlNodePtr @@ -535,6 +547,13 @@ mg_backend_readmng_extract_manga_info_from_current_li (MgBackendReadmng *self, mg_manga_new (mg_util_xml_get_attr (xml_utils, img, "src"), (char *)xmlNodeGetContent (title), id_manga)); } + + if (thumbnail) { + xmlFreeNode (thumbnail); + } + if (title) { + xmlFreeNode (title); + } } static xmlNodePtr diff --git a/src/manga.c b/src/manga.c index cbf4392..470fd96 100644 --- a/src/manga.c +++ b/src/manga.c @@ -99,31 +99,40 @@ mg_manga_details_recovered (MgManga *self) { char * mg_manga_get_id (MgManga *self) { GValue value = G_VALUE_INIT; + char *return_value = NULL; g_value_init (&value, G_TYPE_STRING); g_object_get_property (G_OBJECT (self), "id", &value); - return g_value_dup_string (&value); + return_value = g_value_dup_string (&value); + g_value_unset (&value); + return return_value; } char * mg_manga_get_image_url (MgManga *self) { GValue value = G_VALUE_INIT; + char *return_value = NULL; g_value_init (&value, G_TYPE_STRING); g_object_get_property (G_OBJECT (self), "image_url", &value); - return g_value_dup_string (&value); + return_value = g_value_dup_string (&value); + g_value_unset (&value); + return return_value; } char * mg_manga_get_title (MgManga *self) { GValue value = G_VALUE_INIT; + char *return_value = NULL; g_value_init (&value, G_TYPE_STRING); g_object_get_property (G_OBJECT (self), "title", &value); - return g_value_dup_string (&value); + return_value = g_value_dup_string (&value); + g_value_unset (&value); + return return_value; } char * diff --git a/src/util/xml.c b/src/util/xml.c index eee52f6..a1465c8 100644 --- a/src/util/xml.c +++ b/src/util/xml.c @@ -57,6 +57,8 @@ mg_util_xml_find_class (MgUtilXML *self, xmlNodePtr node, char *class, } } } + g_free (attr); + attr = NULL; } cleanup_mg_util_xml_find_class: if (attr) { diff --git a/src/view/detail_manga.c b/src/view/detail_manga.c index 137e8fc..7f9544d 100644 --- a/src/view/detail_manga.c +++ b/src/view/detail_manga.c @@ -108,5 +108,6 @@ create_detail_view (MgManga *manga, AdwLeaflet *views_leaflet) { g_free (manga_title_text); g_free (title_text); g_free (description_text); + g_clear_object (&xml_util); return detail_view; } diff --git a/src/view/main_view.c b/src/view/main_view.c index daab1a6..b249639 100644 --- a/src/view/main_view.c +++ b/src/view/main_view.c @@ -87,12 +87,10 @@ int main_view_run (int argc, char **argv) { - AdwApplication *app; - int status; - - app = adw_application_new ("org.mangareader", G_APPLICATION_FLAGS_NONE); + AdwApplication *app = adw_application_new ("me.sergiotarxz.mangareader", G_APPLICATION_FLAGS_NONE); + int status = 0; g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); status = g_application_run (G_APPLICATION (app), argc, argv); - g_object_unref (app); + g_clear_object (&app); return status; } diff --git a/src/view/picture.c b/src/view/picture.c index e8dbd78..0fcb8ae 100644 --- a/src/view/picture.c +++ b/src/view/picture.c @@ -35,5 +35,6 @@ create_picture_from_url (char *url, gint picture_height) { cleanup_create_picture_from_url: g_free (downloaded_image); + g_clear_object (&util_soup); return picture; }