[ https://issues.apache.org/jira/browse/FELIX-2437?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Richard S. Hall resolved FELIX-2437. ------------------------------------ Resolution: Fixed I've attempted to resolve this issue. It did avoid the deadlock in my scenario. I modified concurrency handling of the installed bundle data structures. Now they are guarded by the global lock for writes instead of the fine-grained install locks to avoid locking cycles, but with a copy-on-write approach so reads do not need to acquire a lock. I ran through CT and various tests and everything appeared to work. I will post snapshots of everything, including a framework distro, so if you could check in your own scenario, that would be great. Please close this issue if satisfied, thanks. > Deadlock on refrsh Import and refresh > ------------------------------------- > > Key: FELIX-2437 > URL: https://issues.apache.org/jira/browse/FELIX-2437 > Project: Felix > Issue Type: Bug > Components: Configuration Admin > Affects Versions: framework-2.0.4, webconsole-3.0.0 > Environment: Felix framework 2.0.4 > Felix webconsole 3.0.0 > Sling > Reporter: christian > Assignee: Richard S. Hall > Priority: Minor > Fix For: framework-3.2.0 > > > I encountred a Deadlock using Webconsole (s. stacktrace below) > Stepps to reproduce: > 1) in webconsole navigate to "bundles" > 2) select and open the detail view of a bundle that has a lot dependencies (I > used sling and as bundle the sling api bundle) > 3) click "refresh package import" > 4) click "refresh" > It the request from 4) is processed while he one from 3) is still running, > you get a deadlock. > Found one Java-level deadlock: > ============================= > "0:0:0:0:0:0:0:1 [1277221470284] GET /system/console/bundles/105 HTTP/1.1": > waiting to lock monitor 0x0039de94 (object 0x06448fd0, a > org.apache.felix.framework.BundleImpl), > which is held by "FelixPackageAdmin" > "FelixPackageAdmin": > waiting to lock monitor 0x0039deb4 (object 0x06235658, a > [Ljava.lang.Object;), > which is held by "0:0:0:0:0:0:0:1 [1277221470284] GET > /system/console/bundles/105 HTTP/1.1" > Java stack information for the threads listed above: > =================================================== > "0:0:0:0:0:0:0:1 [1277221470284] GET /system/console/bundles/105 HTTP/1.1": > at > org.apache.felix.framework.BundleImpl.getModules(BundleImpl.java:1001) > - waiting to lock <0x06448fd0> (a > org.apache.felix.framework.BundleImpl) > at > org.apache.felix.framework.Felix.getExportedPackages(Felix.java:3114) > at > org.apache.felix.framework.Felix.getExportedPackages(Felix.java:3093) > - locked <0x06235658> (a [Ljava.lang.Object;) > at > org.apache.felix.framework.PackageAdminImpl.getExportedPackages(PackageAdminImpl.java:184) > at > org.apache.felix.webconsole.internal.core.BundlesServlet.listImportExport(BundlesServlet.java:834) > at > org.apache.felix.webconsole.internal.core.BundlesServlet.bundleDetails(BundlesServlet.java:752) > at > org.apache.felix.webconsole.internal.core.BundlesServlet.bundleInfo(BundlesServlet.java:675) > at > org.apache.felix.webconsole.internal.core.BundlesServlet.writeJSON(BundlesServlet.java:570) > at > org.apache.felix.webconsole.internal.core.BundlesServlet.writeJSON(BundlesServlet.java:511) > at > org.apache.felix.webconsole.internal.core.BundlesServlet.renderContent(BundlesServlet.java:485) > at > org.apache.felix.webconsole.AbstractWebConsolePlugin.doGet(AbstractWebConsolePlugin.java:148) > at > org.apache.felix.webconsole.internal.core.BundlesServlet.doGet(BundlesServlet.java:274) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > at > org.apache.felix.webconsole.internal.servlet.OsgiManager.service(OsgiManager.java:367) > at > org.apache.felix.http.base.internal.handler.ServletHandler.doHandle(ServletHandler.java:93) > at > org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:79) > at > org.apache.felix.http.base.internal.dispatch.ServletPipeline.handle(ServletPipeline.java:42) > at > org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:49) > at > org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33) > at > org.apache.felix.http.base.internal.dispatch.FilterPipeline.dispatch(FilterPipeline.java:48) > at > org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:39) > at > org.apache.felix.http.base.internal.DispatcherServlet.service(DispatcherServlet.java:67) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > at > org.apache.felix.http.proxy.ProxyServlet.service(ProxyServlet.java:60) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > at > org.apache.sling.launchpad.base.webapp.SlingServletDelegate.service(SlingServletDelegate.java:275) > at > org.apache.sling.launchpad.webapp.SlingServlet.service(SlingServlet.java:130) > at > com.day.j2ee.servletengine.ServletRuntimeEnvironment.service(ServletRuntimeEnvironment.java:228) > at > com.day.j2ee.servletengine.RequestDispatcherImpl.doFilter(RequestDispatcherImpl.java:315) > at > com.day.j2ee.servletengine.FilterChainImpl.doFilter(FilterChainImpl.java:74) > at > com.day.crx.launchpad.filters.CRXLaunchpadLicenseFilter.doFilter(CRXLaunchpadLicenseFilter.java:96) > at > com.day.j2ee.servletengine.FilterChainImpl.doFilter(FilterChainImpl.java:72) > at > com.day.j2ee.servletengine.RequestDispatcherImpl.service(RequestDispatcherImpl.java:334) > at > com.day.j2ee.servletengine.RequestDispatcherImpl.service(RequestDispatcherImpl.java:378) > at > com.day.j2ee.servletengine.ServletHandlerImpl.execute(ServletHandlerImpl.java:313) > at > com.day.j2ee.servletengine.DefaultThreadPool$DequeueThread.run(DefaultThreadPool.java:134) > at java.lang.Thread.run(Thread.java:595) > "FelixPackageAdmin": > at org.apache.felix.framework.Felix.getBundles(Felix.java:2594) > - waiting to lock <0x06235658> (a [Ljava.lang.Object;) > at > org.apache.felix.framework.BundleImpl.createModule(BundleImpl.java:1140) > at org.apache.felix.framework.BundleImpl.refresh(BundleImpl.java:170) > - locked <0x06448fd0> (a org.apache.felix.framework.BundleImpl) > at org.apache.felix.framework.Felix.refreshBundle(Felix.java:3574) > at org.apache.felix.framework.Felix.access$900(Felix.java:39) > at > org.apache.felix.framework.Felix$RefreshHelper.refreshOrRemove(Felix.java:4257) > at org.apache.felix.framework.Felix.refreshPackages(Felix.java:3438) > at > org.apache.felix.framework.PackageAdminImpl.run(PackageAdminImpl.java:331) > at java.lang.Thread.run(Thread.java:595) > Found 1 deadlock. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.