src/server/daemon/acldata.c

changeset 61
c858850f3d3a
parent 51
b28cf69f42e8
child 88
73b3485e96f1
--- 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;

mercurial