NO-JIRA Fixing a deadlock during #tearDown and TimedBuffer.stop

This commit is contained in:
Clebert Suconic 2018-02-20 10:09:10 -05:00
parent 67d6bf4844
commit 0273e3e4ff
1 changed files with 16 additions and 7 deletions

View File

@ -170,6 +170,7 @@ public final class TimedBuffer extends CriticalComponentImpl {
public void stop() {
enterCritical(CRITICAL_PATH_STOP);
Thread localTimer = null;
try {
// add critical analyzer here.... <<<<
synchronized (this) {
@ -190,16 +191,24 @@ public final class TimedBuffer extends CriticalComponentImpl {
logRatesTimerTask.cancel();
}
while (timerThread.isAlive()) {
localTimer = timerThread;
timerThread = null;
} finally {
started = false;
}
}
if (localTimer != null) {
while (localTimer.isAlive()) {
try {
timerThread.join();
localTimer.join(1000);
if (localTimer.isAlive()) {
localTimer.interrupt();
}
} catch (InterruptedException e) {
throw new ActiveMQInterruptedException(e);
}
}
} finally {
started = false;
}
}
} finally {
leaveCritical(CRITICAL_PATH_STOP);