]> git.sur5r.net Git - openldap/commitdiff
ITS#7942 tweak previous commit
authorHoward Chu <hyc@openldap.org>
Thu, 18 Sep 2014 05:49:26 +0000 (06:49 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Thu, 18 Sep 2014 09:58:32 +0000 (04:58 -0500)
Only free when cleaning up operation controls, not response controls.
(This only makes a difference on search requests, which may have
multiple responses with the same set of controls.)

servers/slapd/controls.c

index 48d839af4de0200581864e73323043695dca52f5..f25ee0795b7ceeb5c51989ddffb5721890288e4a 100644 (file)
@@ -565,25 +565,27 @@ void slap_free_ctrls(
 {
        int i;
 
-       if( op->o_assertion != NULL ) {
-               filter_free_x( op, op->o_assertion, 1 );
-               op->o_assertion = NULL;
-       }
-       if( op->o_vrFilter != NULL) {
-               vrFilter_free( op, op->o_vrFilter );
-               op->o_vrFilter = NULL;
-       }
-       if( op->o_preread_attrs != NULL ) {
-               op->o_tmpfree( op->o_preread_attrs, op->o_tmpmemctx );
-               op->o_preread_attrs = NULL;
-       }
-       if( op->o_postread_attrs != NULL ) {
-               op->o_tmpfree( op->o_postread_attrs, op->o_tmpmemctx );
-               op->o_postread_attrs = NULL;
-       }
-       if( op->o_pagedresults_state != NULL ) {
-               op->o_tmpfree( op->o_pagedresults_state, op->o_tmpmemctx );
-               op->o_pagedresults_state = NULL;
+       if( ctrls == op->o_ctrls ) {
+               if( op->o_assertion != NULL ) {
+                       filter_free_x( op, op->o_assertion, 1 );
+                       op->o_assertion = NULL;
+               }
+               if( op->o_vrFilter != NULL) {
+                       vrFilter_free( op, op->o_vrFilter );
+                       op->o_vrFilter = NULL;
+               }
+               if( op->o_preread_attrs != NULL ) {
+                       op->o_tmpfree( op->o_preread_attrs, op->o_tmpmemctx );
+                       op->o_preread_attrs = NULL;
+               }
+               if( op->o_postread_attrs != NULL ) {
+                       op->o_tmpfree( op->o_postread_attrs, op->o_tmpmemctx );
+                       op->o_postread_attrs = NULL;
+               }
+               if( op->o_pagedresults_state != NULL ) {
+                       op->o_tmpfree( op->o_pagedresults_state, op->o_tmpmemctx );
+                       op->o_pagedresults_state = NULL;
+               }
        }
 
        for (i=0; ctrls[i]; i++) {