Committed by
Thomas Vachuska
Read the latest value of lastSink
Multiple threads could access the field, lastSink, then they should read the latest value of lastSink Change-Id: I279ed6fa3db357008603cde5cb2c57671e66b33c
Showing
1 changed file
with
4 additions
and
3 deletions
... | @@ -69,7 +69,7 @@ public class CoreEventDispatcher extends DefaultEventSinkRegistry | ... | @@ -69,7 +69,7 @@ public class CoreEventDispatcher extends DefaultEventSinkRegistry |
69 | 69 | ||
70 | // Means to detect long-running sinks | 70 | // Means to detect long-running sinks |
71 | private TimerTask watchdog; | 71 | private TimerTask watchdog; |
72 | - private EventSink lastSink; | 72 | + private volatile EventSink lastSink; |
73 | private final AtomicLong lastStart = new AtomicLong(0); | 73 | private final AtomicLong lastStart = new AtomicLong(0); |
74 | private volatile Future<?> dispatchFuture; | 74 | private volatile Future<?> dispatchFuture; |
75 | 75 | ||
... | @@ -164,11 +164,12 @@ public class CoreEventDispatcher extends DefaultEventSinkRegistry | ... | @@ -164,11 +164,12 @@ public class CoreEventDispatcher extends DefaultEventSinkRegistry |
164 | long delta = System.currentTimeMillis() - lastStartLocal; | 164 | long delta = System.currentTimeMillis() - lastStartLocal; |
165 | if (lastStartLocal > 0 && delta > maxProcessMillis) { | 165 | if (lastStartLocal > 0 && delta > maxProcessMillis) { |
166 | lastStart.set(0); | 166 | lastStart.set(0); |
167 | + EventSink lastSinkLocal = lastSink; | ||
167 | log.warn("Event sink {} exceeded execution time limit: {} ms; spawning new dispatch loop", | 168 | log.warn("Event sink {} exceeded execution time limit: {} ms; spawning new dispatch loop", |
168 | - lastSink.getClass().getName(), delta); | 169 | + lastSinkLocal.getClass().getName(), delta); |
169 | 170 | ||
170 | // Notify the sink that it has exceeded its time limit. | 171 | // Notify the sink that it has exceeded its time limit. |
171 | - lastSink.onProcessLimit(); | 172 | + lastSinkLocal.onProcessLimit(); |
172 | 173 | ||
173 | // Cancel the old dispatch loop and submit a new one. | 174 | // Cancel the old dispatch loop and submit a new one. |
174 | dispatchLoop.stop(); | 175 | dispatchLoop.stop(); | ... | ... |
-
Please register or login to post a comment