diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java index 6aae85a39..fbfbe10ee 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java @@ -654,4 +654,28 @@ public class GanttDiagramGraph implements ICriticalPathCalculable { return result; } +} + +interface IReentranceCases { + public void ifNewEntrance(); +} + +class ReentranceGuard { + private final ThreadLocal inside = new ThreadLocal() { + protected Boolean initialValue() { + return false; + }; + }; + + public void entranceRequested(IReentranceCases reentranceCases) { + if (inside.get()) { + return; + } + inside.set(true); + try { + reentranceCases.ifNewEntrance(); + } finally { + inside.set(false); + } + } } \ No newline at end of file