- if( op->o_txnSpec ) {
- /* acquire connection lock */
- ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex );
- if( op->o_conn->c_txn == CONN_TXN_INACTIVE ) {
- rs->sr_text = "invalid transaction identifier";
- rs->sr_err = LDAP_X_TXN_ID_INVALID;
- goto txnReturn;
- } else if( op->o_conn->c_txn == CONN_TXN_SETTLE ) {
- settle=1;
- goto txnReturn;
- }
-
- if( op->o_conn->c_txn_backend == NULL ) {
- op->o_conn->c_txn_backend = op->o_bd;
-
- } else if( op->o_conn->c_txn_backend != op->o_bd ) {
- rs->sr_text = "transaction cannot span multiple database contexts";
- rs->sr_err = LDAP_AFFECTS_MULTIPLE_DSAS;
- goto txnReturn;
- }
-
- /* insert operation into transaction */
-
- rs->sr_text = "transaction specified";
- rs->sr_err = LDAP_X_TXN_SPECIFY_OKAY;
-
-txnReturn:
- /* release connection lock */
- ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex );
-
- if( !settle ) {
- send_ldap_result( op, rs );
- return rs->sr_err;
- }
- }