From 8f284ce023016618b36905ca5f82f18ffc686cbe Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Sat, 14 Apr 2012 07:54:26 -0700 Subject: [PATCH] Support double-buffering for threaded slapadd --- servers/slapd/slapadd.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/servers/slapd/slapadd.c b/servers/slapd/slapadd.c index 034e941404..58041d3026 100644 --- a/servers/slapd/slapadd.c +++ b/servers/slapd/slapadd.c @@ -333,6 +333,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; @@ -434,8 +435,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 ) @@ -447,7 +451,8 @@ slapadd( int argc, char **argv ) erec.e->e_dn ); } - entry_free( erec.e ); + if ( prev ) entry_free( prev ); + prev = erec.e; } if ( ldif_threaded ) { @@ -458,6 +463,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; -- 2.39.5