--- a/libidav/webdav.c Thu Sep 14 18:11:50 2023 +0200 +++ b/libidav/webdav.c Sun Sep 17 11:21:31 2023 +0200 @@ -51,6 +51,7 @@ return NULL; } context->sessions = cxLinkedListCreate(cxDefaultAllocator, cx_cmp_intptr, CX_STORE_POINTERS); + context->sessions->destructor_data = dav_session_destructor; context->http_proxy = calloc(1, sizeof(DavProxy)); if(!context->http_proxy) { dav_context_destroy(context); @@ -100,11 +101,9 @@ void dav_context_destroy(DavContext *ctx) { // destroy all sessions assoziated with this context - CxIterator i = cxListIterator(ctx->sessions); - cx_foreach(DavSession*, sn, i) { - dav_session_destroy(sn); - } + // ctx->sessions destructor must be dav_session_destructor cxListDestroy(ctx->sessions); + if(ctx->http_proxy) { free(ctx->http_proxy); } @@ -113,7 +112,7 @@ } if(ctx->namespaces) { - i = cxMapIteratorValues(ctx->namespaces); + CxIterator i = cxMapIteratorValues(ctx->namespaces); cx_foreach(DavNamespace*, ns, i) { if(!ns) continue; if(ns->prefix) { @@ -130,7 +129,7 @@ // TODO: implement } if(ctx->keys) { - i = cxMapIteratorValues(ctx->keys); + CxIterator i = cxMapIteratorValues(ctx->keys); cx_foreach(DavKey*, key, i) { if(!key) continue; if(key->name) {