public void Rollback(SinglePhaseEnlistment singlePhaseEnlistment)
        {
            // prevent commands in main thread to run concurrently
            Driver driver = connection.driver;

            lock (driver)
            {
                rollbackThreadId = Thread.CurrentThread.ManagedThreadId;
                while (connection.Reader != null)
                {
                    // wait for reader to finish. Maybe we should not wait
                    // forever and cancel it after some time?
                    System.Threading.Thread.Sleep(100);
                }
                simpleTransaction.Rollback();
                singlePhaseEnlistment.Aborted();
                DriverTransactionManager.RemoveDriverInTransaction(baseTransaction);

                driver.currentTransaction = null;

                if (connection.State == ConnectionState.Closed)
                {
                    connection.CloseFully();
                }
                rollbackThreadId = 0;
            }
        }
    public void SinglePhaseCommit(SinglePhaseEnlistment singlePhaseEnlistment)
    {
      simpleTransaction.Commit();
      singlePhaseEnlistment.Committed();
      DriverTransactionManager.RemoveDriverInTransaction(baseTransaction);
      connection.driver.CurrentTransaction = null;

      if (connection.State == ConnectionState.Closed)
        connection.CloseFully();
    }
Пример #3
0
        void IPromotableSinglePhaseNotification.Rollback(SinglePhaseEnlistment singlePhaseEnlistment)
        {
            simpleTransaction.Rollback();
            singlePhaseEnlistment.Aborted();
            DriverTransactionManager.RemoveDriverInTransaction(baseTransaction);

            connection.driver.CurrentTransaction = null;

            if (connection.State == ConnectionState.Closed)
            {
                connection.CloseFully();
            }
        }
Пример #4
0
        public void Rollback(SinglePhaseEnlistment singlePhaseEnlistment)
        {
            Driver driver = this.connection.driver;

            lock (driver)
            {
                this.rollbackThreadId = Thread.CurrentThread.ManagedThreadId;
                while (this.connection.Reader != null)
                {
                    Thread.Sleep(100);
                }
                this.simpleTransaction.Rollback();
                singlePhaseEnlistment.Aborted();
                DriverTransactionManager.RemoveDriverInTransaction(this.baseTransaction);
                driver.CurrentTransaction = null;
                if (this.connection.State == ConnectionState.Closed)
                {
                    this.connection.CloseFully();
                }
                this.rollbackThreadId = 0;
            }
        }