From a3210aaed785bcaf6e3d12d8fd3f2891a77fde80 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 13 Oct 2015 23:25:44 +0200 Subject: [PATCH] leak: free per-locale cached order data (has additional refcount) --- src/kernel/order.c | 7 +++++++ src/kernel/order.h | 2 ++ src/tests.c | 2 ++ 3 files changed, 11 insertions(+) diff --git a/src/kernel/order.c b/src/kernel/order.c index 90bea11d3..356fec80d 100644 --- a/src/kernel/order.c +++ b/src/kernel/order.c @@ -267,6 +267,13 @@ static void free_localedata(int lindex) { locale_array[lindex]->lang = 0; } +void close_orders(void) { + int i; + for (i = 0; i != MAXLOCALES; ++i) { + if (locale_array[i]) free_localedata(i); + } +} + static order *create_order_i(keyword_t kwd, const char *sptr, bool persistent, const struct locale *lang) { diff --git a/src/kernel/order.h b/src/kernel/order.h index 75d741e42..8ad5592b7 100644 --- a/src/kernel/order.h +++ b/src/kernel/order.h @@ -61,6 +61,8 @@ extern "C" { char *write_order(const order * ord, char *buffer, size_t size); keyword_t init_order(const struct order *ord); + void close_orders(void); + #ifdef __cplusplus } #endif diff --git a/src/tests.c b/src/tests.c index 741812590..8e4b3ef57 100644 --- a/src/tests.c +++ b/src/tests.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -79,6 +80,7 @@ void test_cleanup(void) global.functions.wage = NULL; free_params(&global.parameters); default_locale = 0; + close_orders(); free_locales(); free_spells(); free_buildingtypes();