diff -r feb2f1e115c6 -r c858850f3d3a src/server/daemon/acldata.c --- a/src/server/daemon/acldata.c Mon May 06 14:54:40 2013 +0200 +++ b/src/server/daemon/acldata.c Thu May 09 13:19:51 2013 +0200 @@ -27,6 +27,7 @@ */ #include "../config/acl.h" +#include "../util/atomic.h" #include "config.h" #include "acldata.h" @@ -40,6 +41,30 @@ return dat; } +void acl_data_ref(ACLData *acldata) { + if(acldata) { + ws_atomic_inc32(&acldata->ref); + } +} + +void acl_data_unref(ACLData *acldata) { + uint32_t ref = ws_atomic_dec32(&acldata->ref); + if(ref == 0) { + UcxMapIterator i = ucx_map_iterator(acldata->namedACLs); + WSAcl *acl; + UCX_MAP_FOREACH(acl, i) { + free(acl->ace); + free(acl->ece); + if(acl->acl.authprompt) { + free(acl->acl.authprompt); + } + free(acl); + } + ucx_map_free(acldata->namedACLs); + free(acldata); + } +} + ACLList* acl_get(ACLData *acldata, char *name) { ACLList *acl = ucx_map_cstr_get(acldata->namedACLs, name); return acl;