diff --git a/servers/slapd/back-ldbm/add.c b/servers/slapd/back-ldbm/add.c index 1577c74bed..1b36200c88 100644 --- a/servers/slapd/back-ldbm/add.c +++ b/servers/slapd/back-ldbm/add.c @@ -191,6 +191,26 @@ ldbm_back_add( e->e_id = next_id( be ); + if( e->e_id == NOID ) { + if( p != NULL) { + /* free parent and writer lock */ + cache_return_entry_w( &li->li_cache, p ); + } + + if ( rootlock ) { + /* release root lock */ + ldap_pvt_thread_mutex_unlock(&li->li_root_mutex); + } + + Debug( LDAP_DEBUG_ANY, "ldbm_add: next_id failed\n", + 0, 0, 0 ); + + send_ldap_result( conn, op, LDAP_OTHER, + NULL, "next_id add failed", NULL, NULL ); + + return( -1 ); + } + /* * Try to add the entry to the cache, assign it a new dnid. */ diff --git a/servers/slapd/back-ldbm/nextid.c b/servers/slapd/back-ldbm/nextid.c index c92cbaab78..2ea984a852 100644 --- a/servers/slapd/back-ldbm/nextid.c +++ b/servers/slapd/back-ldbm/nextid.c @@ -123,5 +123,4 @@ next_id( Backend *be ) ldap_pvt_thread_mutex_unlock( &li->li_nextid_mutex ); return id; - }