protected <T> T getPerTxValue(PerTxBox<T> box) { T value = null; if (perTxValues != EMPTY_MAP) { value = (T) perTxValues.get(box); } if ((value == null) && (parent != null)) { value = getRWParent().getPerTxValue(box); } return value; }
protected <T> T getLocalValue(VBox<T> vbox) { InplaceWrite<T> inplace = vbox.inplace; if (inplace.orec.owner == this) { return inplace.tempValue; } T value = null; if (boxesWritten != EMPTY_MAP) { value = (T)boxesWritten.get(vbox); } if ((value == null) && (parent != null)) { value = getRWParent().getLocalValue(vbox); } return value; }
@Override protected <T> T getLocalArrayValue(VArrayEntry<T> entry) { ReadWriteTransaction iter = getRWParent(); while (iter != null) { if (iter.arrayWrites != EMPTY_MAP) { VArrayEntry<T> wsEntry = (VArrayEntry<T>) iter.arrayWrites.get(entry); if (wsEntry == null) { iter = iter.getRWParent(); continue; } if (wsEntry.nestedVersion <= retrieveAncestorVersion(iter)) { return (wsEntry.getWriteValue() == null ? (T) NULL_VALUE : wsEntry.getWriteValue()); } } iter = iter.getRWParent(); } return null; }
protected <T> T getLocalArrayValue(VArrayEntry<T> entry) { T value = null; if (arrayWrites != EMPTY_MAP) { VArrayEntry<T> wsEntry = (VArrayEntry<T>) arrayWrites.get(entry); if (wsEntry != null) { value = (wsEntry.getWriteValue() == null ? (T) NULL_VALUE : wsEntry.getWriteValue()); } } if ((value == null) && (parent != null)) { value = getRWParent().getLocalArrayValue(entry); } return value; }
@Override protected <T> T getLocalArrayValue(VArrayEntry<T> entry) { ReadWriteTransaction iter = getRWParent(); while (iter != null) { synchronized (iter) { if (iter.arrayWrites != EMPTY_MAP) { VArrayEntry<T> wsEntry = (VArrayEntry<T>) iter.arrayWrites.get(entry); if (wsEntry != null) { return (wsEntry.getWriteValue() == null ? (T) NULL_VALUE : wsEntry.getWriteValue()); } } } iter = iter.getRWParent(); } return null; }
private void manualAbort() { ReadWriteTransaction parent = getRWParent(); while (parent != null) { for (ParallelNestedTransaction mergedIntoParent : parent.mergedTxs) { for (VBox vboxMergedIntoParent : mergedIntoParent.boxesWrittenInPlace) { revertOverwrite(vboxMergedIntoParent); } } for (VBox vboxMergedIntoParent : parent.boxesWrittenInPlace) { revertOverwrite(vboxMergedIntoParent); } parent = parent.getRWParent(); } this.orec.version = OwnershipRecord.ABORTED; for (ReadWriteTransaction child : mergedTxs) { child.orec.version = OwnershipRecord.ABORTED; } super.boxesWritten = null; int i = 0; for (ReadBlock block : globalReads) { block.free = true; i++; } blocksFree.get().addAndGet(i); this.globalReads = null; this.nestedReads = null; super.mergedTxs = null; }
@Override protected <T> T getLocalArrayValue(VArrayEntry<T> entry) { if (this.arrayWrites != EMPTY_MAP) { VArrayEntry<T> wsEntry = (VArrayEntry<T>) this.arrayWrites.get(entry); if (wsEntry != null) { return (wsEntry.getWriteValue() == null ? (T) NULL_VALUE : wsEntry.getWriteValue()); } } ReadWriteTransaction iter = getRWParent(); while (iter != null) { synchronized (iter) { if (iter.arrayWrites != EMPTY_MAP) { VArrayEntry<T> wsEntry = (VArrayEntry<T>) iter.arrayWrites.get(entry); if (wsEntry == null) { iter = iter.getRWParent(); continue; } if (wsEntry.nestedVersion <= retrieveAncestorVersion(iter)) { this.arraysRead = this.arraysRead.cons(entry); entry.setReadOwner(iter); return (wsEntry.getWriteValue() == null ? (T) NULL_VALUE : wsEntry.getWriteValue()); } else { TransactionSignaller.SIGNALLER.signalCommitFail(iter); } } } iter = iter.getRWParent(); } return null; }