size_t textlen = sizeof( textbuf );
int rc = 0;
int freevals = 1;
- OpExtraDB oex;
+ OpExtraDB *oex;
Debug( LDAP_DEBUG_TRACE, "%s do_add\n",
op->o_log_prefix, 0, 0 );
}
freevals = 0;
-
- oex.oe.oe_key = (void *)do_add;
- oex.oe_db = NULL;
- LDAP_SLIST_INSERT_HEAD(&op->o_extra, &oex.oe, oe_next);
+ oex = op->o_tmpalloc( sizeof(OpExtraDB), op->o_tmpmemctx );
+ oex->oe.oe_key = (void *)do_add;
+ oex->oe_db = NULL;
+ LDAP_SLIST_INSERT_HEAD(&op->o_extra, &oex->oe, oe_next);
op->o_bd = frontendDB;
rc = frontendDB->be_add( op, rs );
- LDAP_SLIST_REMOVE(&op->o_extra, &oex.oe, OpExtra, oe_next);
if ( rc == SLAPD_ASYNCOP ) {
/* skip cleanup */
return rc;
}
+ LDAP_SLIST_REMOVE(&op->o_extra, &oex->oe, OpExtra, oe_next);
#ifdef LDAP_X_TXN
if ( rc == LDAP_X_TXN_SPECIFY_OKAY ) {
/* skip cleanup */
} else
#endif
if ( rc == 0 ) {
- if ( op->ora_e != NULL && oex.oe_db != NULL ) {
+ if ( op->ora_e != NULL && oex->oe_db != NULL ) {
BackendDB *bd = op->o_bd;
- op->o_bd = oex.oe_db;
+ op->o_bd = oex->oe_db;
be_entry_release_w( op, op->ora_e );
op->o_bd = bd;
}
}
+ op->o_tmpfree( oex, op->o_tmpmemctx );
done:;
if ( modlist != NULL ) {