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] [Comment Edited] (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 edited comment on SLING-11620 at 10/14/22 7:16 AM:
-----------------------------------------------------------------

Some logs when 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}


was (Author: sagarmiglani):
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)