@Override public Transaction makeNestedTransaction(boolean readOnly) { // always create a RW nested transaction, because we need its read-set return new NestedTransaction(this); }
@Override protected Transaction commitAndBeginTx(boolean readOnly) { commitTx(true); return beginWithActiveRecord(readOnly, null); }
@Override public <T> T getBoxValue(VBox<T> vbox) { return super.getBoxValue(vbox); }
Cons<VBox[]> parentArrays = this.getRWParent().bodiesRead; Cons<VBox[]> myArrays = this.bodiesRead; while (myArrays != parentArrays) { returnToPool(myArrays.first()); myArrays = myArrays.rest(); mergedTxs = null; linearNestedOrecs = null; current.set(this.getParent());
@Override public <T> void setPerTxValue(PerTxBox<T> box, T value) { if (!txAllowsWrite()) { throw new WriteOnReadError(); } else { super.setPerTxValue(box, value); } }
@Override public <T> void setBoxValue(jvstm.VBox<T> vbox, T value) { if (!txAllowsWrite()) { throw new WriteOnReadError(); } else { super.setBoxValue(vbox, value); } }
@Override protected void tryCommit() { ReadWriteTransaction parent = getRWParent();
if (isAncestor(currentOwner.owner)) { vbox.inplace = new InplaceWrite<T>(this.orec, (value == null ? (T) NULL_VALUE : value), inplaceWrite); overwrittenAncestorWriteSet = overwrittenAncestorWriteSet.cons(vbox);