You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Sagar Miglani (Jira)" <ji...@apache.org> on 2022/10/14 07:17:00 UTC
[jira] [Commented] (SLING-11620) Synchronization issue in Webconsole Security Provider
[ https://issues.apache.org/jira/browse/SLING-11620?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17617527#comment-17617527 ]
Sagar Miglani commented on SLING-11620:
---------------------------------------
An instance where it happened.
{code:xml}
1LKDEADLOCK Deadlock detected !!!
NULL ---------------------
NULL
2LKDEADLOCKTHR Thread "OsgiInstallerImpl" (0x00000000013DDA00)
3LKDEADLOCKWTR is waiting for:
4LKDEADLOCKMON sys_mon_t:0x00007FF767F71FF8 infl_mon_t: 0x00007FF767F72078:
4LKDEADLOCKOBJ org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener$Listener@0x000000010AE74D28
3LKDEADLOCKOWN which is owned by:
2LKDEADLOCKTHR Thread "FelixStartLevel" (0x00000000010D7D00)
3LKDEADLOCKWTR which is waiting for:
4LKDEADLOCKMON sys_mon_t:0x00007FF767F720A8 infl_mon_t: 0x00007FF767F72128:
4LKDEADLOCKOBJ org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener@0x000000010AE74CE8
3LKDEADLOCKOWN which is owned by:
2LKDEADLOCKTHR Thread "OsgiInstallerImpl" (0x00000000013DDA00)
{code}
OsgiInstallerImpl thread:
{code:xml}
State: Deadlock/Blocked
Monitor: Owns Monitor Lock on org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener$Listener@0x000000010AE74D28 , org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener@0x000000010AE74CE8
Waiting for Monitor Lock on org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener$Listener@0x000000010AE74D28 , org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener@0x000000010AE74CE8
Java Stack:
at org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener$Listener.getService(ServicesListener.java:218)
at org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener.notifyChange(ServicesListener.java:90)
at org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener$Listener.releaseService(ServicesListener.java:257)
at org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener$Listener.serviceChanged(ServicesListener.java:269)
at org/apache/felix/framework/EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:990(Compiled Code))
at org/apache/felix/framework/EventDispatcher.fireEventImmediately(EventDispatcher.java:838(Compiled Code))
at org/apache/felix/framework/EventDispatcher.fireServiceEvent(EventDispatcher.java:545(Compiled Code))
at org/apache/felix/framework/Felix.fireServiceEvent(Felix.java:4833(Compiled Code))
at org/apache/felix/framework/Felix.access$000(Felix.java:112(Compiled Code))
at org/apache/felix/framework/Felix$1.serviceChanged(Felix.java:434(Compiled Code))
at org/apache/felix/framework/ServiceRegistry.unregisterService(ServiceRegistry.java:170(Compiled Code))
at org/apache/felix/framework/ServiceRegistrationImpl.unregister(ServiceRegistrationImpl.java:145)
at org/apache/sling/jcr/base/AbstractSlingRepositoryManager.unregisterService(AbstractSlingRepositoryManager.java:289)
at org/apache/sling/jcr/base/AbstractSlingRepositoryManager.stop(AbstractSlingRepositoryManager.java:560)
at com/adobe/granite/repository/impl/SlingRepositoryManager.deactivate(SlingRepositoryManager.java:259)
at sun/reflect/NativeMethodAccessorImpl.invoke0(Native Method)
{code}
FelixStartLevel thread
{code:xml}
State: Deadlock/Blocked
Monitor: Owns Monitor Lock on org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener$Listener@0x000000010AE74D28 , org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener@0x000000010AE74CE8
Waiting for Monitor Lock on org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener$Listener@0x000000010AE74D28 , org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener@0x000000010AE74CE8
Java Stack:
at org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener.notifyChange(ServicesListener.java:90)
at org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener$Listener.retainService(ServicesListener.java:241)
at org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener$Listener.serviceChanged(ServicesListener.java:267)
at org/apache/felix/framework/EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:990(Compiled Code))
at org/apache/felix/framework/EventDispatcher.fireEventImmediately(EventDispatcher.java:838(Compiled Code))
at org/apache/felix/framework/EventDispatcher.fireServiceEvent(EventDispatcher.java:545)
at org/apache/felix/framework/Felix.fireServiceEvent(Felix.java:4833)
at org/apache/felix/framework/Felix.registerService(Felix.java:3804)
at org/apache/felix/framework/BundleContextImpl.registerService(BundleContextImpl.java:328)
at org/apache/felix/scr/impl/manager/AbstractComponentManager$3.register(AbstractComponentManager.java:906)
at org/apache/felix/scr/impl/manager/AbstractComponentManager$3.register(AbstractComponentManager.java:892)
at org/apache/felix/scr/impl/manager/RegistrationManager.changeRegistration(RegistrationManager.java:128)
at org/apache/felix/scr/impl/manager/AbstractComponentManager.registerService(AbstractComponentManager.java:959)
at org/apache/felix/scr/impl/manager/AbstractComponentManager.activateInternal(AbstractComponentManager.java:732)
at org/apache/felix/scr/impl/manager/DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1045)
at org/apache/felix/scr/impl/manager/DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:999)
at org/apache/felix/scr/impl/manager/ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1216)
at org/apache/felix/scr/impl/manager/ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1137)
at org/apache/felix/scr/impl/manager/ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:944)
{code}
> Synchronization issue in Webconsole Security Provider
> -----------------------------------------------------
>
> Key: SLING-11620
> URL: https://issues.apache.org/jira/browse/SLING-11620
> Project: Sling
> Issue Type: Bug
> Components: Extensions
> Affects Versions: Web Console Security Provider 1.2.6
> Reporter: Sagar Miglani
> Priority: Major
> Attachments: BlockedThreads.png, WebconsoleServiceListeners.patch
>
>
> WebconsoleSecurityProvider's [ServiceListeners|https://github.com/apache/sling-org-apache-sling-extensions-webconsolesecurityprovider/blob/master/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener.java] class has three fields of Listener (an inner class of {{ServiceListeners}} implementing {{ServiceListener}}) {{repositoryListener}}, {{authSupportListener}}, {{authListener}}.
> Each of listener uses synchronized methods and on any {{ServiceChanged}} event it may call {{notifyChange}} method of {{ServiceListeners}} parent class which is also a synchronized method and in this method we are again calling all of the listener fields' {{getService}} sychronized methods
> If two service events for these listeneres fields occur simulatenously a deadlock situation may arise.
> eg:
> Thread1:
> - repositoryListener -> serviceChanged
> - synchronized retainSerivce - (self lock acquired)
> - synchronized notifyChange - (parent's lock acquired)
> Thread2:
> - authSupportListener -> serviceChanged
> - synchronized retainService - (self lock aquired)
> - synchronized notifyChange - (wait for thread 1 to release parent's lock)
> Thread1:
> - synchronized (authSupportListener) getService - (wait for thread 2 to release the lock)
> Tried to replicate the scenario [^WebconsoleServiceListeners.patch]. The test in this patch file fails due to timeout.
> On taking thread snapshot you may see the thread blocked and waiting for each other. [^BlockedThreads.png]
> Shouldn't these all listener fields and parent class be using the shared lock instead of sychronized methods
--
This message was sent by Atlassian Jira
(v8.20.10#820010)