CAS 6.6.x - deadlock detected during the tomcat start

69 views
Skip to first unread message

Milan Siebenbürger

unread,
Aug 9, 2023, 4:44:06 AM8/9/23
to CAS Community
Hi,

since the update from 6.5.x to 6.6.x we have been dealing with a deadlock problem.

The reason is that com.zaxxer.hikari.pool.ProxyLeakTask sometimes tries to log a Warning about database pool leakage (when tomcat starts), but this log is passed through code to org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton when the deadlock occurs.

Thread1
Deadlock found :-
"main" Id=1 in BLOCKED on lock=java.lang.String@181bb00b
     owned by 6319096d-f634-47dd-9a79-f420f35dc17e housekeeper Id=7208
    at org.springframework.cloud.context.scope.GenericScope$BeanLifecycleWrapper.getBean(GenericScope.java:375)
    at org.springframework.cloud.context.scope.GenericScope.get(GenericScope.java:179)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:371)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)

Thread 2:
Id=7208 in BLOCKED on lock=java.util.concurrent.ConcurrentHashMap@5a2fa6f3
     owned by main Id=1
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:216)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1609)
...
    at java...@11.0.16/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
    at org.apereo.cas.util.text.TicketCatalogMessageSanitationContributor.getTicketIdentifierPrefixes(TicketCatalogMessageSanitationContributor.java:30)
    at org.apereo.cas.config.CasCoreUtilConfiguration$CasCoreUtilEssentialConfiguration$$Lambda$1525/0x0000000100ef7c40.apply(Unknown Source)
...
    at java...@11.0.16/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
    at org.apereo.cas.config.CasCoreUtilConfiguration$CasCoreUtilEssentialConfiguration.messageSanitizer(CasCoreUtilConfiguration.java:168)
    at java...@11.0.16/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1163)
    at org.apereo.cas.util.spring.ApplicationContextProvider.getMessagSanitizer(ApplicationContextProvider.java:208)
    at org.apereo.cas.logging.LoggingUtils.prepareLogEvent(LoggingUtils.java:28)
    at org.apereo.cas.logging.CasAppender.append(CasAppender.java:80)
    at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:161)
...
    at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1891)
    at org.apache.logging.slf4j.Log4jLogger.warn(Log4jLogger.java:254)
    at com.zaxxer.hikari.pool.ProxyLeakTask.run(ProxyLeakTask.java:84)
    at java...@11.0.16/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)


For now, we have disabled logging com.zaxxer.hikari.pool.ProxyLeakTask. Does anyone have any idea how to solve this properly?

Thanks
Milan Siebenbürger
Reply all
Reply to author
Forward
0 new messages