[
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)