From b421b3d2af7dfaecbf2c6befbdfe374c16ad123a Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Tue, 13 Jul 2021 15:09:11 +0100 Subject: [PATCH] Free Jobs for Customers and Vendors on book close --- libgnucash/engine/gncCustomer.c | 2 ++ libgnucash/engine/gncJob.c | 12 ++++++++++++ libgnucash/engine/gncJob.h | 1 + libgnucash/engine/gncVendor.c | 2 ++ 4 files changed, 17 insertions(+) diff --git a/libgnucash/engine/gncCustomer.c b/libgnucash/engine/gncCustomer.c index ddb03aee04..2ce39c8cce 100644 --- a/libgnucash/engine/gncCustomer.c +++ b/libgnucash/engine/gncCustomer.c @@ -353,6 +353,8 @@ static void gncCustomerFree (GncCustomer *cust) gncAddressDestroy (cust->addr); gncAddressBeginEdit (cust->shipaddr); gncAddressDestroy (cust->shipaddr); + + gncJobFreeList (cust->jobs); g_list_free (cust->jobs); g_free (cust->balance); diff --git a/libgnucash/engine/gncJob.c b/libgnucash/engine/gncJob.c index 46fb843d61..8d9e42297d 100644 --- a/libgnucash/engine/gncJob.c +++ b/libgnucash/engine/gncJob.c @@ -231,6 +231,18 @@ GncJob *gncJobCreate (QofBook *book) return job; } +static void free_job_list (GncJob *job) +{ + gncJobBeginEdit (job); + gncJobDestroy (job); +} + +void gncJobFreeList (GList *jobs) +{ + GList *job_list = g_list_copy (jobs); + g_list_free_full (job_list, (GDestroyNotify)free_job_list); +} + void gncJobDestroy (GncJob *job) { if (!job) return; diff --git a/libgnucash/engine/gncJob.h b/libgnucash/engine/gncJob.h index b40cdbcab4..e68585f9e3 100644 --- a/libgnucash/engine/gncJob.h +++ b/libgnucash/engine/gncJob.h @@ -57,6 +57,7 @@ GType gnc_job_get_type(void); GncJob *gncJobCreate (QofBook *book); void gncJobDestroy (GncJob *job); +void gncJobFreeList (GList *jobs); /** \name Set Functions @{ diff --git a/libgnucash/engine/gncVendor.c b/libgnucash/engine/gncVendor.c index 67af18c61e..50695de27d 100644 --- a/libgnucash/engine/gncVendor.c +++ b/libgnucash/engine/gncVendor.c @@ -496,6 +496,8 @@ static void gncVendorFree (GncVendor *vendor) CACHE_REMOVE (vendor->notes); gncAddressBeginEdit (vendor->addr); gncAddressDestroy (vendor->addr); + + gncJobFreeList (vendor->jobs); g_list_free (vendor->jobs); g_free (vendor->balance);