# HG changeset patch # User Olaf Wintermann <olaf.wintermann@gmail.com> # Date 1738257552 -3600 # Node ID e70418bb14b1008f4c9f4417f1410188ff848177 # Parent 0fa595aefd0ff335328dc67a3c5fdb9c936abcd0 add cleanup for webdav module diff -r 0fa595aefd0f -r e70418bb14b1 src/server/daemon/webserver.c --- a/src/server/daemon/webserver.c Wed Jan 29 20:51:31 2025 +0100 +++ b/src/server/daemon/webserver.c Thu Jan 30 18:19:12 2025 +0100 @@ -283,6 +283,11 @@ } void webserver_end() { + cfgmgr_shutdown(); + shutdown_threadpools(60); + + shutdown_eventhandlers_wait(); // TODO: timeout + // execute restart callbacks RestartCallback *re = atrestart; while(re) { @@ -290,11 +295,6 @@ re = re->next; } - cfgmgr_shutdown(); - shutdown_threadpools(60); - - shutdown_eventhandlers_wait(); - webserver_destroy(); } diff -r 0fa595aefd0f -r e70418bb14b1 src/server/webdav/webdav.c --- a/src/server/webdav/webdav.c Wed Jan 29 20:51:31 2025 +0100 +++ b/src/server/webdav/webdav.c Thu Jan 30 18:19:12 2025 +0100 @@ -77,6 +77,10 @@ #define WEBDAV_RESOURCE_TYPE_COLLECTION "<D:collection/>" +static void webdav_cleanup(void *data) { + cxMapDestroy(webdav_type_map); + cxMapDestroy(method_handler_map); +} static WebdavBackend* default_backend_create(Session *sn, Request *rq, pblock *pb, void *initData) { WebdavBackend *dav = pool_malloc(sn->pool, sizeof(WebdavBackend)); @@ -105,10 +109,10 @@ int webdav_register_backend(const char *name, webdav_init_func webdavInit, webdav_create_func webdavCreate) { - WebdavType *webdavType = malloc(sizeof(WebdavType)); - webdavType->init = webdavInit; - webdavType->create = webdavCreate; - return cxMapPut(webdav_type_map, cx_hash_key_str(name), webdavType); + WebdavType webdavType; + webdavType.init = webdavInit; + webdavType.create = webdavCreate; + return cxMapPut(webdav_type_map, cx_hash_key_str(name), &webdavType); } WebdavType* webdav_get_type(cxstring dav_class) { @@ -146,7 +150,7 @@ } webdav_is_initialized = TRUE; - webdav_type_map = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 8); + webdav_type_map = cxHashMapCreate(cxDefaultAllocator, sizeof(WebdavType), 8); if(!webdav_type_map) { return REQ_ABORTED; } @@ -203,6 +207,8 @@ dav_resourcetype_collection.value.data = dav_resourcetype_collection_value; dav_resourcetype_collection.vtype = WS_VALUE_XML_DATA; + webserver_atrestart(webdav_cleanup, NULL); + return REQ_PROCEED; }