From: Howard Chu Date: Fri, 10 Jun 2011 10:27:40 +0000 (-0700) Subject: ITS#6944 limit op cache to 10 ops per thread X-Git-Url: https://git.sur5r.net/?p=openldap;a=commitdiff_plain;h=de395ddad31baf9be5659190fc0df1a30ac814e3 ITS#6944 limit op cache to 10 ops per thread --- diff --git a/servers/slapd/operation.c b/servers/slapd/operation.c index 5707396dd9..ae7b4a8a72 100644 --- a/servers/slapd/operation.c +++ b/servers/slapd/operation.c @@ -127,10 +127,21 @@ slap_op_free( Operation *op, void *ctx ) op->o_controls = opbuf->ob_controls; if ( ctx ) { - void *op2 = NULL; + Operation *op2 = NULL; ldap_pvt_thread_pool_setkey( ctx, (void *)slap_op_free, op, slap_op_q_destroy, &op2, NULL ); LDAP_STAILQ_NEXT( op, o_next ) = op2; + if ( op2 ) { + op->o_tincr = op2->o_tincr + 1; + /* No more than 10 ops on per-thread free list */ + if ( op->o_tincr > 10 ) { + ldap_pvt_thread_pool_setkey( ctx, (void *)slap_op_free, + op2, slap_op_q_destroy, NULL, NULL ); + ber_memfree_x( op, NULL ); + } + } else { + op->o_tincr = 1; + } } else { ber_memfree_x( op, NULL ); }