--- servers/slapd/filter.c 2008/09/05 22:00:37 1.150 +++ servers/slapd/filter.c 2008/10/09 20:34:43 1.151 @@ -1,5 +1,5 @@ /* filter.c - routines for parsing and dealing with filters */ -/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.149 2008/02/18 18:47:07 ando Exp $ */ +/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.150 2008/09/05 22:00:37 ando Exp $ */ /* This work is part of OpenLDAP Software . * * Copyright 1998-2008 The OpenLDAP Foundation. @@ -492,7 +492,7 @@ return_error: } void -filter_free_x( Operation *op, Filter *f ) +filter_free_x( Operation *op, Filter *f, int freeme ) { Filter *p, *next; @@ -531,7 +531,7 @@ filter_free_x( Operation *op, Filter *f case LDAP_FILTER_NOT: for ( p = f->f_list; p != NULL; p = next ) { next = p->f_next; - filter_free_x( op, p ); + filter_free_x( op, p, 1 ); } break; @@ -548,7 +548,9 @@ filter_free_x( Operation *op, Filter *f break; } - op->o_tmpfree( f, op->o_tmpmemctx ); + if ( freeme ) { + op->o_tmpfree( f, op->o_tmpmemctx ); + } } void @@ -560,7 +562,7 @@ filter_free( Filter *f ) op.o_hdr = &ohdr; op.o_tmpmemctx = slap_sl_context( f ); op.o_tmpmfuncs = &slap_sl_mfuncs; - filter_free_x( &op, f ); + filter_free_x( &op, f, 1 ); } void