gnucash stable: [assistant-stock-transaction] refresh_handler: avoid leaking GList*

Christopher Lam clam at code.gnucash.org
Sat Sep 16 20:36:42 EDT 2023


Updated	 via  https://github.com/Gnucash/gnucash/commit/41167e32 (commit)
	from  https://github.com/Gnucash/gnucash/commit/09474bb2 (commit)



commit 41167e3270c1380c3d84c50ce7675359cc70ba9d
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Sun Sep 17 00:37:42 2023 +0800

    [assistant-stock-transaction] refresh_handler: avoid leaking GList*
    
    by using scanning the GHashTable directly.

diff --git a/gnucash/gnome/assistant-stock-transaction.cpp b/gnucash/gnome/assistant-stock-transaction.cpp
index 2c15423612..bc29ecbfb2 100644
--- a/gnucash/gnome/assistant-stock-transaction.cpp
+++ b/gnucash/gnome/assistant-stock-transaction.cpp
@@ -2639,6 +2639,12 @@ stock_assistant_cancel_cb (GtkAssistant *assistant, gpointer user_data)
 }
 
 
+static bool
+is_destroying (gpointer key, EventInfo* change, gpointer user_data)
+{
+    return (change->event_mask & QOF_EVENT_DESTROY);
+};
+
 static void
 refresh_handler (GHashTable *changes, gpointer user_data)
 {
@@ -2649,16 +2655,11 @@ refresh_handler (GHashTable *changes, gpointer user_data)
  * should be only one entry, so just get the value and see if it
  * matches QOF_EVENT_DESTROY.
  */
-    auto list = g_hash_table_get_values(changes);
-    for (auto node = list; node; node = g_list_next(node))
+    if (g_hash_table_find (changes, (GHRFunc)is_destroying, nullptr))
     {
-        auto change{static_cast<EventInfo*>(node->data)};
-        if (change->event_mask & QOF_EVENT_DESTROY)
-        {
-            PWARN ("Stock account destroyed, cancelling assistant.");
-            auto controller = static_cast<StockAssistantController*>(user_data);
-            gnc_close_gui_component_by_data(ASSISTANT_STOCK_TRANSACTION_CM_CLASS, controller);
-        }
+        PWARN ("Stock account destroyed, cancelling assistant.");
+        auto controller = static_cast<StockAssistantController*>(user_data);
+        gnc_close_gui_component_by_data(ASSISTANT_STOCK_TRANSACTION_CM_CLASS, controller);
     }
 }
 



Summary of changes:
 gnucash/gnome/assistant-stock-transaction.cpp | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)



More information about the gnucash-changes mailing list