You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by "Gary Gregory (JIRA)" <ji...@apache.org> on 2014/07/24 18:02:39 UTC

[jira] [Resolved] (LOG4J2-738) RollingFileManager deadlock if async action thread fails to start

     [ https://issues.apache.org/jira/browse/LOG4J2-738?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gary Gregory resolved LOG4J2-738.
---------------------------------

       Resolution: Fixed
    Fix Version/s: 2.0.1

{noformat}
commit -m "[LOG4J2-738] RollingFileManager deadlock if async action thread fails to start." C:/vcs/svn/apache/log4j2/trunk-alt/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java C:/vcs/svn/apache/log4j2/trunk-alt/src/changes/changes.xml
    Sending        C:/vcs/svn/apache/log4j2/trunk-alt/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
    Sending        C:/vcs/svn/apache/log4j2/trunk-alt/src/changes/changes.xml
    Transmitting file data ...
    Committed revision 1613171.
{noformat}

Please verify, comment, and resolve or close as appropriate.

Thank you!
Gary

> 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
>             Fix For: 2.0.1
>
>
> 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: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org