jpcmonster opened a new issue, #3252: URL: https://github.com/apache/logging-log4j2/issues/3252
## Description SpringBoot 3.x application experiences deadlock/hang at startup with ActiveMQ Artemis and log4j2. Deadlock occurs if SpringBoot `backend-preinit` is enabled (the default); if disabled, it causes a stackoverflow instead. Both stacktraces are attached. Best guess from our team is that it may relate to [weak references](https://github.com/apache/logging-log4j2/blob/2.x/log4j-core/src/main/java/org/apache/logging/log4j/core/util/internal/InternalLoggerRegistry.java) in `InternalLoggerRegistry` and `LoggerContext` [use of](https://github.com/apache/logging-log4j2/blob/2.x/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java#L531) `computeIfAbsent()`. The speculation is that if a registered logger is released as a weak reference during initialization, then it may be repeatedly initialized - causing aconcurrency/deadlock issue. ## Configuration **Version:** 2.24.2 **Operating system:** Windows 10 (observed on Alma Linux as well) **JDK:** Eclipse Temurin 17.0.8.1 ## Logs with `backend-preinit` enabled: ``` Java stack information for the threads listed above: =================================================== "main": at jdk.internal.misc.Unsafe.park(java.base@17.0.8.1/Native Method) - parking to wait for <0x0000000613400050> (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync) at java.util.concurrent.locks.LockSupport.park(java.base@17.0.8.1/LockSupport.java:211) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@17.0.8.1/AbstractQueuedSynchronizer.java:715) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(java.base@17.0.8.1/AbstractQueuedSynchronizer.java:1027) at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(java.base@17.0.8.1/ReentrantReadWriteLock.java:738) at org.apache.logging.log4j.core.util.internal.InternalLoggerRegistry.getLogger(InternalLoggerRegistry.java:69) at org.apache.logging.log4j.core.util.internal.InternalLoggerRegistry.computeIfAbsent(InternalLoggerRegistry.java:139) at org.apache.logging.log4j.core.LoggerContext.getLogger(LoggerContext.java:530) at org.apache.logging.log4j.core.LoggerContext.getLogger(LoggerContext.java:503) at org.apache.logging.log4j.core.LoggerContext.getLogger(LoggerContext.java:65) at org.apache.commons.logging.LogAdapter$Log4jLog.<init>(LogAdapter.java:159) at org.apache.commons.logging.LogAdapter$Log4jAdapter.createLog(LogAdapter.java:113) at org.apache.commons.logging.LogAdapter$$Lambda$118/0x0000019da7117580.apply(Unknown Source) at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:95) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:59) at org.apache.commons.beanutils.MethodUtils.getMatchingAccessibleMethod(MethodUtils.java:942) at org.apache.commons.beanutils.MappedPropertyDescriptor.getMethod(MappedPropertyDescriptor.java:404) at org.apache.commons.beanutils.MappedPropertyDescriptor.<init>(MappedPropertyDescriptor.java:104) at org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptor(PropertyUtilsBean.java:972) at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:935) at org.apache.activemq.artemis.utils.uri.BeanSupport.setData(BeanSupport.java:89) - locked <0x0000000613428b20> (a org.apache.commons.beanutils.BeanUtilsBean) at org.apache.activemq.artemis.uri.AbstractCFSchema.newConectionOptions(AbstractCFSchema.java:36) at org.apache.activemq.artemis.uri.TCPSchema.internalNewObject(TCPSchema.java:50) at org.apache.activemq.artemis.uri.TCPSchema.internalNewObject(TCPSchema.java:37) at org.apache.activemq.artemis.utils.uri.URISchema.newObject(URISchema.java:84) at org.apache.activemq.artemis.utils.uri.URIFactory.newObject(URIFactory.java:69) at org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory.createConnectionFactory(ActiveMQInitialContextFactory.java:185) at org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory.getInitialContext(ActiveMQInitialContextFactory.java:65) at javax.naming.spi.NamingManager.getInitialContext(java.naming@17.0.8.1/NamingManager.java:732) at javax.naming.InitialContext.getDefaultInitCtx(java.naming@17.0.8.1/InitialContext.java:305) at javax.naming.InitialContext.init(java.naming@17.0.8.1/InitialContext.java:236) at javax.naming.InitialContext.<init>(java.naming@17.0.8.1/InitialContext.java:208) at org.springframework.jndi.JndiTemplate.createInitialContext(JndiTemplate.java:141) at org.springframework.jndi.JndiTemplate.getContext(JndiTemplate.java:108) at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:90) at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:157) at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:179) at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:96) at org.springframework.jndi.JndiLocatorDelegate.lookup(JndiLocatorDelegate.java:64) at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:78) at org.springframework.jndi.JndiLocatorDelegate.lookup(JndiLocatorDelegate.java:59) at org.springframework.jndi.JndiPropertySource.getProperty(JndiPropertySource.java:93) at org.springframework.boot.context.properties.source.SpringConfigurationPropertySource.getConfigurationProperty(SpringConfigurationPropertySource.java:84) ... ``` with `backend-preinit` disabled: ``` Exception in thread "SpringApplicationShutdownHook" java.lang.StackOverflowError at java.base/java.net.URI$Parser.parseAuthority(URI.java:3260) at java.base/java.net.URI$Parser.parseHierarchical(URI.java:3221) at java.base/java.net.URI$Parser.parse(URI.java:3177) at java.base/java.net.URI.<init>(URI.java:623) at org.apache.activemq.artemis.utils.uri.URIFactory.normalise(URIFactory.java:133) at org.apache.activemq.artemis.utils.uri.URIFactory.expandURI(URIFactory.java:49) at org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory.getFactoryType(ActiveMQInitialContextFactory.java:190) at org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory.getInitialContext(ActiveMQInitialContextFactory.java:61) at java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:732) at java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305) at java.naming/javax.naming.InitialContext.init(InitialContext.java:236) at java.naming/javax.naming.InitialContext.<init>(InitialContext.java:208) at org.springframework.jndi.JndiTemplate.createInitialContext(JndiTemplate.java:141) at org.springframework.jndi.JndiTemplate.getContext(JndiTemplate.java:108) at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:90) at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:157) at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:179) at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:96) at org.springframework.jndi.JndiLocatorDelegate.lookup(JndiLocatorDelegate.java:64) at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:78) at org.springframework.jndi.JndiLocatorDelegate.lookup(JndiLocatorDelegate.java:59) at org.springframework.jndi.JndiPropertySource.getProperty(JndiPropertySource.java:93) at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:85) ``` ## Reproduction This happens consistently on startup of our SpringBoot 3.x application with Artemis 2.38 and Log4j 2.24.2 . -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@logging.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org