]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/at.c
Add comments
[openldap] / servers / slapd / at.c
index 5c3cad15c5667774beca4a5a53645227f2d5bb0a..63f5f629c48e3244427508744237f563e64b5e6a 100644 (file)
@@ -171,6 +171,21 @@ at_find_in_list(
        return -1;
 }
 
+void
+at_destroy( void )
+{
+       AttributeType *a, *n;
+       avl_free(attr_index, ldap_memfree);
+
+       for (a=attr_list; a; a=n) {
+               n = a->sat_next;
+               ldap_memfree(a->sat_subtypes);
+               ad_destroy(a->sat_ad);
+               ldap_pvt_thread_mutex_destroy(&a->sat_ad_mutex);
+               ldap_attributetype_free((LDAPAttributeType *)a);
+       }
+}
+
 static int
 at_insert(
     AttributeType      *sat,
@@ -207,13 +222,12 @@ at_insert(
                while ( *names ) {
                        air = (struct aindexrec *)
                                ch_calloc( 1, sizeof(struct aindexrec) );
-                       air->air_name = ch_strdup(*names);
+                       air->air_name = *names;
                        air->air_at = sat;
                        if ( avl_insert( &attr_index, (caddr_t) air,
                                         (AVL_CMP) attr_index_cmp,
                                         (AVL_DUP) avl_dup_error ) ) {
                                *err = *names;
-                               ldap_memfree(air->air_name);
                                ldap_memfree(air);
                                return SLAP_SCHERR_DUP_ATTR;
                        }
@@ -262,7 +276,9 @@ at_add(
        sat = (AttributeType *) ch_calloc( 1, sizeof(AttributeType) );
        AC_MEMCPY( &sat->sat_atype, at, sizeof(LDAPAttributeType));
 
-       sat->sat_cname = cname;
+       sat->sat_cname.bv_val = cname;
+       sat->sat_cname.bv_len = strlen( cname );
+       ldap_pvt_thread_mutex_init(&sat->sat_ad_mutex);
 
        if ( at->at_sup_oid ) {
                AttributeType *supsat = at_find(at->at_sup_oid);