- ret = bdb_cache_add_entry_rw( bdb->bi_dbenv,
- &bdb->bi_cache, *e, rw, locker, lock);
- while ( ret == 1 || ret == -1 ) {
- Entry *ee;
- int add_loop_cnt = 0;
- if ( (*e)->e_private != NULL ) {
- free ((*e)->e_private);
- }
- (*e)->e_private = NULL;
- if ( (ee = bdb_cache_find_entry_id
- (bdb->bi_dbenv, &bdb->bi_cache, id, rw, locker, lock) ) != NULL) {
- bdb_entry_return ( *e );
- *e = ee;
- return 0;
- }
- if ( ++add_loop_cnt == BDB_MAX_ADD_LOOP ) {
- bdb_entry_return ( *e );
- *e = NULL;
- return LDAP_BUSY;
- }
- }
- if ( ret != 0 ) {
- if ( (*e)->e_private != NULL )
- free ( (*e)->e_private );
- bdb_entry_return( *e );
- *e = NULL;
- }
- rc = ret;
- }
-
- if (rc == 0) {
- bdb_cache_entry_commit(*e);