While the JC runtime will guarantee that almost all operations will be performed atomically, this guarantee is only made for individual operations. For example, if a tear occurs while the linked list is being updated, then the list state may become inconsistent and objects may be lost.
This change makes sure that we wrap all high-level commands that change non-volatile state in a transaction. This ensures that tearing won't leave the applet in a bad state.
This change also converts two instances of arrayCopy into their non-atomic counterpart, since there is no benefit to them being atomic.
While the JC runtime will guarantee that almost all operations will be performed atomically, this guarantee is only made for individual operations. For example, if a tear occurs while the linked list is being updated, then the list state may become inconsistent and objects may be lost.
This change makes sure that we wrap all high-level commands that change non-volatile state in a transaction. This ensures that tearing won't leave the applet in a bad state.
This change also converts two instances of
arrayCopy
into their non-atomic counterpart, since there is no benefit to them being atomic.