Ejemplo n.º 1
0
void
gcd_api_rollback( GCD_PCB *pcb )
{
    pcb->api.name = "IIapi_rollback()";
    pcb->api.parm.roll.rb_genParm.gp_callback = gcd_roll_cmpl;
    pcb->api.parm.roll.rb_genParm.gp_closure = (PTR)pcb;
    pcb->api.parm.roll.rb_tranHandle = pcb->ccb->cib->tran;

    if ( pcb->data.tran.savepoint != NULL )
	pcb->api.parm.roll.rb_savePointHandle = pcb->data.tran.savepoint;
    else
    {
	pcb->api.parm.roll.rb_savePointHandle = NULL;
	pcb->ccb->cib->tran = NULL;
	pcb->result.flags |= PCB_RSLT_XACT_END;
    }

    IIapi_rollback( &pcb->api.parm.roll );
    return;
}
Ejemplo n.º 2
0
static void
IIdemo_rollback( II_PTR *tranHandle )
{
    IIAPI_ROLLBACKPARM	rollbackParm;
    IIAPI_WAITPARM	waitParm = { -1 };

    printf( "IIdemo_rollback: rolling back transaction\n" );

    rollbackParm.rb_genParm.gp_callback = NULL;
    rollbackParm.rb_genParm.gp_closure = NULL;
    rollbackParm.rb_tranHandle = *tranHandle;
    rollbackParm.rb_savePointHandle = NULL; 

    IIapi_rollback( &rollbackParm );

    while( rollbackParm.rb_genParm.gp_completed == FALSE )
	IIapi_wait( &waitParm );

    *tranHandle = NULL;
    return;
}