[slf4j-dev] [JIRA] (SLF4J-469) Potential memory leaks if there is no underlying implementation

QOS.CH (JIRA) noreply-jira at qos.ch
Thu Aug 22 12:46:00 CEST 2019


yu created SLF4J-469:
------------------------

             Summary: Potential memory leaks if there is no underlying implementation
                 Key: SLF4J-469
                 URL: https://jira.qos.ch/browse/SLF4J-469
             Project: SLF4J
          Issue Type: Bug
    Affects Versions: 1.7.26
         Environment: java 8 

slf4j 1.7.26

 
            Reporter: yu
            Assignee: SLF4J developers list
            Priority: Critical


 

*If I don't have  'logback'  'log4j'...... Implementation class*

The problem lies in the method 

*public static ILoggerFactory getILoggerFactory()*

first  Thread1:
{code:java}
if (INITIALIZATION_STATE == UNINITIALIZED) {

   init.....

}
{code}
secode Thread2:
{code:java}
case ONGOING_INITIALIZATION:
      return SUBST_FACTORY;{code}
 obtained "SUBST_FACTORY",

 and obtained "SubstituteLogger"

 

third:

Thread1: 
{code:java}
//init failed cache "NoClassDefFoundError"
INITIALIZATION_STATE = NOP_FALLBACK_INITIALIZATION;
{code}
*The SubstituteLogger obtained by Thread2 will always output the log to the queue until the memory overflows.*
{code:java}
// code placeholder

synchronized public  Logger getLogger(String name) {
    SubstituteLogger logger = loggers.get(name);
    if (logger == null) {
        logger = new SubstituteLogger(name, eventQueue, postInitialization);
        loggers.put(name, logger);
    }
    return logger;
}

public void info(String msg) {
    delegate().info(msg);
}

Logger delegate() {
    if(_delegate != null) {   //_delegate== null forever
        return _delegate;
    }
    if(createdPostInitialization) {  createdPostInitialization == false forever
        return NOPLogger.NOP_LOGGER;
    } else {
        return getEventRecordingLogger();  
    }
}

{code}
 

 

 

 



--
This message was sent by Atlassian JIRA
(v7.3.1#73012)


More information about the slf4j-dev mailing list