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