void
attrs_free( Attribute *a )
{
- Attribute *b, *tail, *next;
-
if ( a ) {
+ Attribute *b = (Attribute *)0xBAD, *tail, *next;
+
+ /* save tail */
tail = a;
do {
next = a->a_next;
} while ( next );
ldap_pvt_thread_mutex_lock( &attr_mutex );
+ /* replace NULL with current attr list and let attr list
+ * start from last attribute returned to list */
tail->a_next = attr_list;
attr_list = b;
ldap_pvt_thread_mutex_unlock( &attr_mutex );
*nvalsp = nvals;
}
-error_return:;
if ( rc != LDAP_SUCCESS && nvals != NULL ) {
ber_bvarray_free_x( nvals, memctx );
}