]> git.sur5r.net Git - openldap/commitdiff
Revert to ordering behavior of original attrs_free()
authorHoward Chu <hyc@openldap.org>
Mon, 1 Jan 2007 13:42:36 +0000 (13:42 +0000)
committerHoward Chu <hyc@openldap.org>
Mon, 1 Jan 2007 13:42:36 +0000 (13:42 +0000)
servers/slapd/attr.c

index a3b97370966239ab013806bdfcec6d884e9d7689..3880e43db4e2085d3005c1f275edf7f18d1cb429 100644 (file)
@@ -185,17 +185,21 @@ comp_tree_free( Attribute *a )
 void
 attrs_free( Attribute *a )
 {
-       Attribute *b;
+       Attribute *b, *tail, *next;
 
        if ( a ) {
-               for(b = a ; ; b = b->a_next ) {
-                       attr_clean( b );
-                       if ( !b->a_next )
-                               break;
-               }
+               tail = a;
+               do {
+                       next = a->a_next;
+                       attr_clean( a );
+                       a->a_next = b;
+                       b = a;
+                       a = next;
+               } while ( next );
+
                ldap_pvt_thread_mutex_lock( &attr_mutex );
-               b->a_next = attr_list;
-               attr_list = a;
+               tail->a_next = attr_list;
+               attr_list = b;
                ldap_pvt_thread_mutex_unlock( &attr_mutex );
        }
 }