@Override public Transaction makeParallelNestedTransaction(boolean readOnly) { if (readOnly) { return new ParallelNestedReadOnlyTransaction(this); } else { return new ParallelNestedTransaction(this); } }
value = readGlobal(vbox); return value; int versionOnAnc = retrieveAncestorVersion(inplaceOrec.owner); if (versionOnAnc >= 0 && entryNestedVersion <= versionOnAnc) { return (value == NULL_VALUE) ? null : value; value = readGlobal(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; }
@Override protected void tryCommit() { ReadWriteTransaction parent = getRWParent(); Cons<ParallelNestedTransaction> currentOrecs; Cons<ParallelNestedTransaction> modifiedOrecs; do { currentOrecs = parent.mergedTxs; modifiedOrecs = currentOrecs.cons(this); for (ParallelNestedTransaction child : mergedTxs) { modifiedOrecs = modifiedOrecs.cons(child); } } while (!parent.CASmergedTxs(currentOrecs, modifiedOrecs)); if (!this.arraysRead.isEmpty()) { synchronized (parent) { parent.arraysRead = this.arraysRead.reverseInto(parent.arraysRead); } } }
@Override public Transaction makeParallelNestedTransaction(boolean readOnly) { if (!readOnly) { throw new WriteOnReadException(); } return new ParallelNestedReadOnlyTransaction(this); }