X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=servers%2Fslapd%2Fslapadd.c;h=58041d3026fea10c2b7d4665a42263a12a174253;hb=470b126e9f94d08b46765545fcaf8b623913bfa4;hp=ec0eb011d23f88f040d640be15eea684debdf6ff;hpb=55060f6b1f23c6e4276d8e10ef73eaf1f2a3ab3a;p=openldap diff --git a/servers/slapd/slapadd.c b/servers/slapd/slapadd.c index ec0eb011d2..58041d3026 100644 --- a/servers/slapd/slapadd.c +++ b/servers/slapd/slapadd.c @@ -302,11 +302,13 @@ getrec_thr(void *ctx) return NULL; } +static int ldif_threaded; + static int getrec(Erec *erec) { int rc; - if ( slap_tool_thread_max < 2 ) + if ( !ldif_threaded ) return getrec0(erec); while (!trec.ready) @@ -331,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; @@ -404,6 +407,7 @@ slapadd( int argc, char **argv ) ldap_pvt_thread_mutex_init( &add_mutex ); ldap_pvt_thread_cond_init( &add_cond ); ldap_pvt_thread_create( &thr, 0, getrec_thr, NULL ); + ldif_threaded = 1; } erec.nextline = 0; @@ -431,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 ) @@ -444,10 +451,11 @@ 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 ) { + if ( ldif_threaded ) { ldap_pvt_thread_mutex_lock( &add_mutex ); add_stop = 1; trec.ready = 0; @@ -455,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;