Return-Path: X-Original-To: apmail-openjpa-dev-archive@www.apache.org Delivered-To: apmail-openjpa-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 8A58DDD91 for ; Fri, 27 Jul 2012 10:03:36 +0000 (UTC) Received: (qmail 36385 invoked by uid 500); 27 Jul 2012 10:03:36 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 36206 invoked by uid 500); 27 Jul 2012 10:03:36 -0000 Mailing-List: contact dev-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list dev@openjpa.apache.org Received: (qmail 36173 invoked by uid 99); 27 Jul 2012 10:03:35 -0000 Received: from issues-vm.apache.org (HELO issues-vm) (140.211.11.160) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 27 Jul 2012 10:03:35 +0000 Received: from isssues-vm.apache.org (localhost [127.0.0.1]) by issues-vm (Postfix) with ESMTP id BCCAF140B94 for ; Fri, 27 Jul 2012 10:03:34 +0000 (UTC) Date: Fri, 27 Jul 2012 10:03:34 +0000 (UTC) From: "Michael Pradel (JIRA)" To: dev@openjpa.apache.org Message-ID: <1345364314.109997.1343383414775.JavaMail.jiratomcat@issues-vm> Subject: [jira] [Created] (OPENJPA-2243) Deadlock involving FormatPreservingProperties MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 Michael Pradel created OPENJPA-2243: --------------------------------------- Summary: Deadlock involving FormatPreservingProperties Key: OPENJPA-2243 URL: https://issues.apache.org/jira/browse/OPENJPA-2243 Project: OpenJPA Issue Type: Bug Components: lib Affects Versions: 2.2.0 Environment: All environments Reporter: Michael Pradel FormatPreservingProperties extends Properties, which is a thread-safe class, but it does not preserve the thread safety. This leads to surprising deadlocks if you have a reference of type Properties, because it may turn out to be not thread-safe (despite being documented as such). Here's a simplified example that shows how we hit this bug: final Properties p1 = new Properties(); final Properties p2 = createPropsWithDefault(p1); p2.put(p2, p2); Thread t1 = new Thread(new Runnable() { public void run() { p2.remove(p1); } }); Thread t2 = new Thread(new Runnable() { public void run() { p2.stringPropertyNames(); } }); t1.start(); t2.start(); try { t1.join(); t2.join(); } catch (InterruptedException e) { e.printStackTrace(); } Properties createPropsWithDefault(Properties p) { // return new Properties(p); // OK return new FormatPreservingProperties(p); // leads to deadlock } If createPropsWithDefault() returns Properties, everything is OK (as it should be, because Properties is thread-safe). However, if it returns FormatPreservingProperties, we occasionally get a deadlock. Are you aware of this inconsistency? It seems that the safest way of extending Properties is to make methods that override synchronized methods synchronized. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira