[
https://issues.apache.org/jira/browse/LOG4J2-738?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Gary Gregory updated LOG4J2-738:
--------------------------------
Description:
The symptom we're seeing is a thread stuck trying to acquire the semaphore in
RollingFileManager.rollover(). It looks like the RollingFileManager can fail
to release the semaphore if there is an exception during thread start for the
async path in the rollover() method.
I think this is the relevant chunk of code:
{code:java}
if (success && descriptor.getAsynchronous() != null) {
LOGGER.debug("RollingFileManager executing async {}",
descriptor.getAsynchronous());
thread = new Thread(new
AsyncAction(descriptor.getAsynchronous(), this));
thread.start();
}
return true;
}
return false;
} finally {
if (thread == null) {
semaphore.release();
}
}
{code}
So, if thread start fails (because of OOM), the 'thread' variable will be !=
null and so the semaphore won't be released.
was:
The symptom we're seeing is a thread stuck trying to acquire the semaphore in
RollingFileManager.rollover(). It looks like the RollingFileManager can fail
to release the semaphore if there is an exception during thread start for the
async path in the rollover() method.
I think this is the relevant chunk of code:
if (success && descriptor.getAsynchronous() != null) {
LOGGER.debug("RollingFileManager executing async {}",
descriptor.getAsynchronous());
thread = new Thread(new
AsyncAction(descriptor.getAsynchronous(), this));
thread.start();
}
return true;
}
return false;
} finally {
if (thread == null) {
semaphore.release();
}
}
So, if thread start fails (because of OOM), the 'thread' variable will be !=
null and so the semaphore won't be released.
> RollingFileManager deadlock if async action thread fails to start
> -----------------------------------------------------------------
>
> Key: LOG4J2-738
> URL: https://issues.apache.org/jira/browse/LOG4J2-738
> Project: Log4j 2
> Issue Type: Bug
> Components: Appenders
> Affects Versions: 2.0-rc1
> Environment: amazon linux
> Reporter: Timothy Stack
>
> The symptom we're seeing is a thread stuck trying to acquire the semaphore in
> RollingFileManager.rollover(). It looks like the RollingFileManager can fail
> to release the semaphore if there is an exception during thread start for the
> async path in the rollover() method.
> I think this is the relevant chunk of code:
> {code:java}
> if (success && descriptor.getAsynchronous() != null) {
> LOGGER.debug("RollingFileManager executing async {}",
> descriptor.getAsynchronous());
> thread = new Thread(new
> AsyncAction(descriptor.getAsynchronous(), this));
> thread.start();
> }
> return true;
> }
> return false;
> } finally {
> if (thread == null) {
> semaphore.release();
> }
> }
> {code}
> So, if thread start fails (because of OOM), the 'thread' variable will be !=
> null and so the semaphore won't be released.
--
This message was sent by Atlassian JIRA
(v6.2#6252)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]