/* for per statement rollback */
char internal_svp; /* is set? */
char internal_op; /* operation being executed as to internal savepoint */
- unsigned char lock_CC_for_rb;
unsigned char rbonerr;
unsigned char opt_in_progress;
unsigned char opt_previous;
if (CC_is_in_error_trans(conn))
return ret;
- if (0 == conn->lock_CC_for_rb)
+ if (!stmt->lock_CC_for_rb)
{
ENTER_CONN_CS(conn);
- conn->lock_CC_for_rb++;
+ stmt->lock_CC_for_rb = TRUE;
}
MYLOG(DETAIL_LOG_LEVEL, " %p->accessed=%d opt=%u in_progress=%u prev=%u\n", conn, CC_accessed_db(conn), option, conn->opt_in_progress, conn->opt_previous);
conn->opt_in_progress &= option;
MYLOG(DETAIL_LOG_LEVEL, "entering %p->accessed=%d is_in=%d is_rb=%d is_tc=%d\n", conn, CC_accessed_db(conn),
CC_is_in_trans(conn), SC_is_rb_stmt(stmt), SC_is_tc_stmt(stmt));
- if (conn->lock_CC_for_rb > 0)
+ if (stmt->lock_CC_for_rb)
MYLOG(0, "in_progress=%u previous=%d\n", conn->opt_in_progress, conn->opt_previous);
switch (ret)
{
conn->opt_previous = conn->opt_in_progress;
CC_init_opt_in_progress(conn);
}
- while (conn->lock_CC_for_rb > 0)
+ if (stmt->lock_CC_for_rb)
{
+ stmt->lock_CC_for_rb = FALSE;
LEAVE_CONN_CS(conn);
- conn->lock_CC_for_rb--;
MYLOG(DETAIL_LOG_LEVEL, " release conn_lock\n");
}
CC_start_stmt(conn);
rv->callbacks = NULL;
GetDataInfoInitialize(SC_get_GDTI(rv));
PutDataInfoInitialize(SC_get_PDTI(rv));
+ rv->lock_CC_for_rb = FALSE;
INIT_STMT_CS(rv);
}
return rv;
ProcessedStmt *pstmt;
ProcessedStmt *next_pstmt;
+ if (self->lock_CC_for_rb)
+ {
+ LEAVE_CONN_CS(SC_get_conn(self));
+ self->lock_CC_for_rb = FALSE;
+ }
if (initializeOriginal)
{
if (self->statement)
po_ind_t discard_output_params; /* discard output parameters on parse stage */
po_ind_t cancel_info; /* cancel information */
po_ind_t ref_CC_error; /* refer to CC_error ? */
-// po_ind_t lock_CC_for_rb; /* lock CC for statement rollback ? */
+ po_ind_t lock_CC_for_rb; /* lock CC for statement rollback ? */
po_ind_t join_info; /* have joins ? */
po_ind_t parse_method; /* parse_statement is forced or ? */
po_ind_t curr_param_result; /* current param result is set ? */