# HG changeset patch
# User Olaf Wintermann <olaf.wintermann@gmail.com>
# Date 1738259683 -3600
# Node ID 76450adae540e8fffff387b48f94ff1f960f1c0e
# Parent  76ccfc2a932f5ad77c09205ff520a48a5f8d1392
add saf function map cleanup

diff -r 76ccfc2a932f -r 76450adae540 src/server/daemon/config.c
--- a/src/server/daemon/config.c	Thu Jan 30 18:29:30 2025 +0100
+++ b/src/server/daemon/config.c	Thu Jan 30 18:54:43 2025 +0100
@@ -1159,7 +1159,7 @@
             // add the type for each extension to the map
             for(int i=0;i<d->nextensions;i++) {
                 cxstring ext = d->extensions[i];
-                cxmutstr value = cx_strdup(cx_strn(d->type.ptr, d->type.length));
+                cxmutstr value = cx_strdup_a(cfg->a, cx_strn(d->type.ptr, d->type.length));
                 if(cxMapPut(map, cx_hash_key_bytes((const unsigned char *)ext.ptr, ext.length), value.ptr)) {
                     log_ereport(LOG_CATASTROPHE, "OOM");
                     ret = -1;
diff -r 76ccfc2a932f -r 76450adae540 src/server/daemon/func.c
--- a/src/server/daemon/func.c	Thu Jan 30 18:29:30 2025 +0100
+++ b/src/server/daemon/func.c	Thu Jan 30 18:54:43 2025 +0100
@@ -38,8 +38,18 @@
 
 CxMap *function_map;
 
+static void funcstruct_free(FuncStruct *f) {
+    free((char*)f->name);
+    free(f);
+}
+
 void func_init() {
     function_map = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 256);
+    function_map->simple_destructor = (cx_destructor_func)funcstruct_free;
+}
+
+void func_cleanup() {
+    cxMapDestroy(function_map);
 }
 
 void add_function(FuncStruct *func) {
diff -r 76ccfc2a932f -r 76450adae540 src/server/daemon/func.h
--- a/src/server/daemon/func.h	Thu Jan 30 18:29:30 2025 +0100
+++ b/src/server/daemon/func.h	Thu Jan 30 18:54:43 2025 +0100
@@ -40,6 +40,7 @@
     (f)->func(pb, sn, rq)
 
 void func_init();
+void func_cleanup();
 
 void add_function(struct FuncStruct *func);
 
diff -r 76ccfc2a932f -r 76450adae540 src/server/daemon/webserver.c
--- a/src/server/daemon/webserver.c	Thu Jan 30 18:29:30 2025 +0100
+++ b/src/server/daemon/webserver.c	Thu Jan 30 18:54:43 2025 +0100
@@ -297,9 +297,7 @@
         free(re);
         re = re_next;
     }
-    
-    resource_pool_cleanup();
-    
+     
     webserver_destroy();
 }
 
@@ -347,6 +345,12 @@
     // however it will result in a nicer valgrind output with less
     // memory leaks
     pool_destroy(cfg_get_init_pool());
+    
+    resource_pool_cleanup();
+    func_cleanup();
+    
+    ServerConfiguration *scfg = cfgmgr_get_server_config();
+    pool_destroy(scfg->pool);
 }
 
 int nsapi_runtime_version() {