Return-Path: X-Original-To: apmail-commons-issues-archive@minotaur.apache.org Delivered-To: apmail-commons-issues-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 517E7100BD for ; Sat, 31 May 2014 04:36:43 +0000 (UTC) Received: (qmail 34713 invoked by uid 500); 31 May 2014 04:10:03 -0000 Delivered-To: apmail-commons-issues-archive@commons.apache.org Received: (qmail 34584 invoked by uid 500); 31 May 2014 04:10:03 -0000 Mailing-List: contact issues-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: issues@commons.apache.org Delivered-To: mailing list issues@commons.apache.org Received: (qmail 34532 invoked by uid 99); 31 May 2014 04:10:03 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 31 May 2014 04:10:03 +0000 Date: Sat, 31 May 2014 04:10:03 +0000 (UTC) From: "Phil Steitz (JIRA)" To: issues@commons.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Closed] (DBCP-369) Exception when using SharedPoolDataSource 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/DBCP-369?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Phil Steitz closed DBCP-369. ---------------------------- > Exception when using SharedPoolDataSource concurrently > ------------------------------------------------------ > > Key: DBCP-369 > URL: https://issues.apache.org/jira/browse/DBCP-369 > Project: Commons Dbcp > Issue Type: Bug > Affects Versions: 1.4 > Environment: Java Hotspot Server VM 1.6.0_07, Linux > Reporter: Michael Pradel > Fix For: 1.5.1, 2.0 > > Attachments: DBCP-369.patch > > > Hi, > I get a ConcurrentModificationException when using instances of SharedPoolDataSource concurrently. The problem occurs when one thread calls setDataSourceName() while another thread calls close(), either on the same instance of SharedPoolDataSource or on different instances. I'll attach a short example program that leads to an exception for almost every run on my machine. > The cause of the exception seems to be in InstanceKeyObjectFactory. registerNewInstance() is synchronized, but removeInstance() isn't. This allows concurrent accesses to the non-thread-safe 'instanceMap'. > Is this a bug? Or are SharedPoolDataSource and InstanceKeyObjectFactory not supposed to be thread-safe? > Thanks! > import java.util.ArrayList; > import org.apache.commons.dbcp.datasources.SharedPoolDataSource; > public class SharedPoolDataSourceTest { > public static void main(String[] args) { > new SharedPoolDataSourceTest().run(); > } > > private void run() { > final ArrayList dataSources = new ArrayList(); > for (int j = 0; j < 10000; j++) { > SharedPoolDataSource dataSource = new SharedPoolDataSource(); > dataSources.add(dataSource); > } > > Thread t1 = new Thread(new Runnable() { > public void run() { > for (SharedPoolDataSource dataSource : dataSources) { > dataSource.setDataSourceName("a"); > } > } > }); > Thread t2 = new Thread(new Runnable() { > public void run() { > for (SharedPoolDataSource dataSource : dataSources) { > try { dataSource.close(); } catch (Exception e) {} > } > > } > }); > t1.start(); > t2.start(); > try { > t1.join(); > t2.join(); > } catch (InterruptedException ie) {} > } > } > Exception in thread "Thread-0" java.util.ConcurrentModificationException > at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) > at java.util.HashMap$KeyIterator.next(HashMap.java:828) > at org.apache.commons.dbcp.datasources.InstanceKeyObjectFactory.registerNewInstance(InstanceKeyObjectFactory.java:51) > at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.setDataSourceName(InstanceKeyDataSource.java:246) > at potentialBugs.SharedPoolDataSourceTest$1.run(SharedPoolDataSourceTest.java:23) > at java.lang.Thread.run(Thread.java:619) -- This message was sent by Atlassian JIRA (v6.2#6252)