Skip to content

Commit

Permalink
Merge pull request #1404 from dimagi/ctsims/LazyNodeset
Browse files Browse the repository at this point in the history
Isolate LazyNodeset lock from evaluated object
  • Loading branch information
ctsims authored Apr 19, 2024
2 parents 935650f + e0ae54f commit db04547
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions src/main/java/org/javarosa/xpath/XPathLazyNodeset.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,8 @@
*/
public class XPathLazyNodeset extends XPathNodeset {

//Since we're using this as a lock, we need to be very careful to ensure that each
//nodeset gets its own new object.
private Boolean evaluated = Boolean.valueOf(false);
private Object evalLock = new Object();
private boolean evaluated = false;
private final TreeReference unExpandedRef;

/**
Expand All @@ -43,7 +42,7 @@ public XPathLazyNodeset(TreeReference unExpandedRef, DataInstance instance, Eval


private void performEvaluation() {
synchronized (evaluated) {
synchronized (evalLock) {
if (evaluated) {
return;
}
Expand All @@ -57,7 +56,7 @@ private void performEvaluation() {
}
}
this.setReferences(nodes);
evaluated = Boolean.valueOf(true);
evaluated = true;
}
}

Expand All @@ -69,7 +68,7 @@ private void performEvaluation() {
*/
@Override
public Object unpack() {
synchronized (evaluated) {
synchronized (evalLock) {
if (evaluated) {
return super.unpack();
}
Expand Down

0 comments on commit db04547

Please sign in to comment.