Return-Path: X-Original-To: apmail-felix-dev-archive@www.apache.org Delivered-To: apmail-felix-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 1E6851111F for ; Fri, 4 Jul 2014 16:16:35 +0000 (UTC) Received: (qmail 85484 invoked by uid 500); 4 Jul 2014 16:16:34 -0000 Delivered-To: apmail-felix-dev-archive@felix.apache.org Received: (qmail 85403 invoked by uid 500); 4 Jul 2014 16:16:34 -0000 Mailing-List: contact dev-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list dev@felix.apache.org Received: (qmail 85217 invoked by uid 99); 4 Jul 2014 16:16:34 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 04 Jul 2014 16:16:34 +0000 Date: Fri, 4 Jul 2014 16:16:34 +0000 (UTC) From: "Benjamin Rogge (JIRA)" To: dev@felix.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (FELIX-4523) Deadlock in URLHandlers when Felix.init and Felix.stop are called concurrently MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/FELIX-4523?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14052538#comment-14052538 ] Benjamin Rogge commented on FELIX-4523: --------------------------------------- The changes in urlhandlers-2.patch result in compile errors when I apply them in Intellij. Is this a problem with (me or) Intellij or is the patch broken? {code} public static void unregisterFrameworkInstance(Object framework) { boolean unregister = false; synchronized (m_frameworks) { if (m_frameworks.contains(framework)) { if (m_frameworks.size() == 1 && m_handler != null) { unregister = true; } } } // <-- This appears to be too much else { m_counter--; } } {code} > Deadlock in URLHandlers when Felix.init and Felix.stop are called concurrently > ------------------------------------------------------------------------------ > > Key: FELIX-4523 > URL: https://issues.apache.org/jira/browse/FELIX-4523 > Project: Felix > Issue Type: Bug > Components: Framework > Affects Versions: framework-4.2.1 > Environment: linux, junittests > Reporter: Benjamin Rogge > Assignee: Karl Pauls > Attachments: ConcurrentTest.java, urlhandlers-2.patch, urlhandlers.patch > > > From time to time we are experiencing a deadlock in the URLHandlers Class in Apache Felix. We are using Felix as an embedded OSGi Container and instantiate the Felix Framework via ServiceLoader and Framework Factory ourselves. The situation is as follows: When Felix.stop and Felix.init are called by different threads, eventually URLHandlers.unregisterFrameworkListsForContextSearch and URLHandlers.registerFrameworkInstance are called by the threads. There are two locks: m_frameworks and the Class Object of URL (URL.class). registerFrameworkInstance tries to aquire m_frameworks first and via the constructor of URLHanders URL.class after that. unregisterFrameworkListsForContextSearch tries to aquire URL.class first and m_frameworks after that. This is a classic deadlock situation. The situation arises in unittests where we frequently start and stop the felix framework. > Stacktracke log: > {code} > Found one Java-level deadlock: > ============================= > "FelixShutdown": > waiting to lock monitor 0x0000000000ff7710 (object 0x00000007ff33e7f0, a java.util.ArrayList), > which is held by "main" > "main": > waiting to lock monitor 0x00000000022c4a08 (object 0x0000000783b06b18, a java.lang.Class), > which is held by "FelixShutdown" > Java stack information for the threads listed above: > =================================================== > "FelixShutdown": > at org.apache.felix.framework.URLHandlers.unregisterFrameworkListsForContextSearch(URLHandlers.java:315) > - waiting to lock <0x00000007ff33e7f0> (a java.util.ArrayList) > - locked <0x00000007ff33e840> (a java.util.HashMap) > - locked <0x0000000783b06b18> (a java.lang.Class for java.net.URL) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at org.apache.felix.framework.util.SecureAction.invoke(SecureAction.java:840) > at org.apache.felix.framework.URLHandlers.unregisterFrameworkInstance(URLHandlers.java:635) > at org.apache.felix.framework.URLHandlersActivator.stop(URLHandlersActivator.java:76) > at org.apache.felix.framework.util.SecureAction.stopActivator(SecureAction.java:667) > at org.apache.felix.framework.Felix$SystemBundleActivator.stop(Felix.java:4715) > at org.apache.felix.framework.util.SecureAction.stopActivator(SecureAction.java:667) > at org.apache.felix.framework.Felix.stopBundle(Felix.java:2530) > at org.apache.felix.framework.Felix$2.run(Felix.java:959) > at java.lang.Thread.run(Thread.java:724) > "main": > at org.apache.felix.framework.URLHandlers.(URLHandlers.java:150) > - waiting to lock <0x0000000783b06b18> (a java.lang.Class for java.net.URL) > at org.apache.felix.framework.URLHandlers.registerFrameworkInstance(URLHandlers.java:600) > - locked <0x00000007ff33e7f0> (a java.util.ArrayList) > at org.apache.felix.framework.URLHandlersActivator.start(URLHandlersActivator.java:71) > at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645) > at org.apache.felix.framework.Felix$SystemBundleActivator.start(Felix.java:4634) > at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645) > at org.apache.felix.framework.Felix.init(Felix.java:783) > {code} -- This message was sent by Atlassian JIRA (v6.2#6252)