-
Notifications
You must be signed in to change notification settings - Fork 178
Description
Hi, we get (sometimes) an exception when comparing two objects and I don't know what it means:
Caused by: java.lang.IllegalArgumentException: Detected inconsistency in enter/leave sequence. Must always be LIFO. at de.danielbechler.diff.circular.CircularReferenceDetector.remove(CircularReferenceDetector.java:113) at de.danielbechler.diff.differ.DifferDispatcher.forgetInstances(DifferDispatcher.java:205) at de.danielbechler.diff.differ.DifferDispatcher.compareWithCircularReferenceTracking(DifferDispatcher.java:164) at de.danielbechler.diff.differ.DifferDispatcher.compare(DifferDispatcher.java:145) at de.danielbechler.diff.differ.DifferDispatcher.dispatch(DifferDispatcher.java:93) at de.danielbechler.diff.differ.BeanDiffer.compareUsingIntrospection(BeanDiffer.java:114) at de.danielbechler.diff.differ.BeanDiffer.compareUsingAppropriateMethod(BeanDiffer.java:104) at de.danielbechler.diff.differ.BeanDiffer.compare(BeanDiffer.java:90) at de.danielbechler.diff.differ.DifferDispatcher.compare(DifferDispatcher.java:188) at de.danielbechler.diff.differ.DifferDispatcher.compareWithCircularReferenceTracking(DifferDispatcher.java:158) at de.danielbechler.diff.differ.DifferDispatcher.compare(DifferDispatcher.java:145) at de.danielbechler.diff.differ.DifferDispatcher.dispatch(DifferDispatcher.java:93) at de.danielbechler.diff.differ.CollectionDiffer.compareItems(CollectionDiffer.java:119) at de.danielbechler.diff.differ.CollectionDiffer.compareInternally(CollectionDiffer.java:141) at de.danielbechler.diff.differ.CollectionDiffer.compare(CollectionDiffer.java:93) at de.danielbechler.diff.differ.DifferDispatcher.compare(DifferDispatcher.java:188) at de.danielbechler.diff.differ.DifferDispatcher.compareWithCircularReferenceTracking(DifferDispatcher.java:158) at de.danielbechler.diff.differ.DifferDispatcher.compare(DifferDispatcher.java:145) at de.danielbechler.diff.differ.DifferDispatcher.dispatch(DifferDispatcher.java:93) at de.danielbechler.diff.differ.BeanDiffer.compareUsingIntrospection(BeanDiffer.java:114) at de.danielbechler.diff.differ.BeanDiffer.compareUsingAppropriateMethod(BeanDiffer.java:104) at de.danielbechler.diff.differ.BeanDiffer.compare(BeanDiffer.java:90) at de.danielbechler.diff.differ.DifferDispatcher.compare(DifferDispatcher.java:188) at de.danielbechler.diff.differ.DifferDispatcher.compareWithCircularReferenceTracking(DifferDispatcher.java:158) at de.danielbechler.diff.differ.DifferDispatcher.compare(DifferDispatcher.java:145) at de.danielbechler.diff.differ.DifferDispatcher.dispatch(DifferDispatcher.java:93) at de.danielbechler.diff.ObjectDiffer.compare(ObjectDiffer.java:49) at com.logitags.cibet.core.CibetUtil.compare(CibetUtil.java:497)
Here is our code:
L. 497: DiffNode root = getObjectDiffer().compare(work, base);
public static ObjectDiffer getObjectDiffer() {
if (objectDiffer == null) {
objectDiffer = ObjectDifferBuilder.startBuilding().introspection()
.setDefaultIntrospector(new EntityIntrospector()).and().differs()
.register(new PrimitiveArrayDifferFactory()).build();
}
return objectDiffer;
}
Can it be that when several theads execute this code in parallel there is some concurrency problem? Is this thread-safe?