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

QOS.CH (JIRA) noreply-jira at qos.ch
Mon Dec 16 22:13:00 CET 2019


     [ https://jira.qos.ch/browse/SLF4J-469?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ceki Gülcü resolved SLF4J-469.
------------------------------
    Resolution: Fixed

Fixed in [commit 306d8fd2|https://github.com/qos-ch/slf4j/commit/306d8fd23d89b0a] on master and in [commit c6c7a98a7ee1|https://github.com/qos-ch/slf4j/commit/c6c7a98a7ee1e7138] on the 1.7 maintenance branch.

> 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: Ceki Gülcü
>            Priority: Critical
>              Labels: logging, substitution
>             Fix For: 2.0.0-alpha2, 1.7.30
>
>
>  
> *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