func (txn *Txn) Discard() {
	if txn.discarded { // Avoid a re-run.
		return
	}
	if atomic.LoadInt32(&txn.numIterators) > 0 {
		panic("Unclosed iterator at time of Txn.Discard.")
	}
	txn.discarded = true
	if !txn.db.orc.isManaged {
		txn.db.orc.readMark.Done(txn.readTs)
	}
	if txn.update {
		txn.db.orc.decrRef()
	}
}
func (txn *Txn) Discard() {
	if txn.discarded { 
		return
	}
	if atomic.LoadInt32(&txn.numIterators) > 0 {
		panic("Unclosed iterator at time of Txn.Discard.")
	}
	txn.discarded = true
	if !txn.db.orc.isManaged {
		txn.db.orc.readMark.Done(txn.readTs)
	}
	if txn.update {
		txn.db.orc.decrRef()
	}
}
func ( txn * Txn ) Discard ( ) { if txn . discarded { // Avoid a re-run. return } if atomic . LoadInt32 ( & txn . numIterators ) > 0 { panic ( " " ) } txn . discarded = true if ! txn . db . orc . isManaged { txn . db . orc . readMark . Done ( txn . readTs ) } if txn . update { txn . db . orc . decrRef ( ) } }
// Discard discards a created transaction. This method is very important and must be called. Commit
// method calls this internally, however, calling this multiple times doesn't cause any issues. So,
// this can safely be called via a defer right when transaction is created.
//
// NOTE: If any operations are run on a discarded transaction, ErrDiscardedTxn is returned.
Discard discards a created transaction . This method is very important and must be called . Commit method calls this internally however calling this multiple times doesn t cause any issues . So this can safely be called via a defer right when transaction is created . NOTE : If any operations are run on a discarded transaction ErrDiscardedTxn is returned .