From: Howard Chu Date: Sat, 14 Apr 2012 14:54:26 +0000 (-0700) Subject: Support double-buffering for threaded slapadd X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=519e2b34b5789ff29d3e4b328c88c7494b1ca5e8;p=openldap Support double-buffering for threaded slapadd --- diff --git a/servers/slapd/slapadd.c b/servers/slapd/slapadd.c index ec0eb011d2..1cf5ceab48 100644 --- a/servers/slapd/slapadd.c +++ b/servers/slapd/slapadd.c @@ -331,6 +331,7 @@ slapadd( int argc, char **argv ) struct berval bvtext; ldap_pvt_thread_t thr; ID id; + Entry *prev = NULL; int ldifrc; int rc = EXIT_SUCCESS; @@ -431,8 +432,11 @@ slapadd( int argc, char **argv ) "(line=%d): %s\n", progname, erec.e->e_dn, erec.lineno, bvtext.bv_val ); rc = EXIT_FAILURE; - entry_free( erec.e ); - if( continuemode ) continue; + if( continuemode ) { + if ( prev ) entry_free( prev ); + prev = erec.e; + continue; + } break; } if ( verbose ) @@ -444,7 +448,8 @@ slapadd( int argc, char **argv ) erec.e->e_dn ); } - entry_free( erec.e ); + if ( prev ) entry_free( prev ); + prev = erec.e; } if ( slap_tool_thread_max > 1 ) { @@ -455,6 +460,7 @@ slapadd( int argc, char **argv ) ldap_pvt_thread_mutex_unlock( &add_mutex ); ldap_pvt_thread_join( thr, NULL ); } + if ( erec.e ) entry_free( erec.e ); if ( ldifrc < 0 ) rc = EXIT_FAILURE;