Gérald Quintana created LOGBACK-1382:
----------------------------------------
Summary: AsyncAppender#putUninterruptibly looks suspicious
Key: LOGBACK-1382
URL: https://jira.qos.ch/browse/LOGBACK-1382
Project: logback
Issue Type: Task
Components: logback-core
Affects Versions: 1.2.3
Environment: The code in AsyncAppenderBase#putUninterruptibly is
suspicious, if InterruptedException is raised in blockingQueue.put(...), the
interrupted flag is set to true but as there is a while(true) around the
current Thread will not be interrupted and the code in the finally block may
never occur.
{code:java}
private void putUninterruptibly(E eventObject) {
boolean interrupted = false;
try {
while (true) {
try {
blockingQueue.put(eventObject);
break;
} catch (InterruptedException e) {
interrupted = true;
}
}
} finally {
if (interrupted) {
Thread.currentThread().interrupt();
}
}
}
{code}
What's the purpose of this infinite loop?
I suspect the intent was to write while(!interrupted&&!pushed) instead of
while(true).
To me, the blockingQueue.put is a blocking operation, the current thread will
wait until it can push the event in the queue. Attempting multiple retries
seems useless and dangerous to me.
Reporter: Gérald Quintana
Assignee: Logback dev list
--
This message was sent by Atlassian JIRA
(v7.3.1#73012)
_______________________________________________
logback-dev mailing list
[email protected]
http://mailman.qos.ch/mailman/listinfo/logback-dev