Return-Path: Delivered-To: apmail-jakarta-commons-dev-archive@www.apache.org Received: (qmail 40413 invoked from network); 6 Nov 2005 18:58:44 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 6 Nov 2005 18:58:44 -0000 Received: (qmail 66700 invoked by uid 500); 6 Nov 2005 18:58:42 -0000 Delivered-To: apmail-jakarta-commons-dev-archive@jakarta.apache.org Received: (qmail 66673 invoked by uid 500); 6 Nov 2005 18:58:41 -0000 Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Help: List-Post: List-Id: "Jakarta Commons Developers List" Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list commons-dev@jakarta.apache.org Received: (qmail 66662 invoked by uid 500); 6 Nov 2005 18:58:41 -0000 Received: (qmail 66659 invoked by uid 99); 6 Nov 2005 18:58:41 -0000 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Sun, 06 Nov 2005 10:58:41 -0800 Received: (qmail 40156 invoked by uid 65534); 6 Nov 2005 18:58:21 -0000 Message-ID: <20051106185820.40155.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r331135 - in /jakarta/commons/proper/configuration/trunk: src/java/org/apache/commons/configuration/AbstractFileConfiguration.java src/test/org/apache/commons/configuration/TestPropertiesConfiguration.java xdocs/changes.xml Date: Sun, 06 Nov 2005 18:58:19 -0000 To: commons-cvs@jakarta.apache.org From: oheger@apache.org X-Mailer: svnmailer-1.0.5 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: oheger Date: Sun Nov 6 10:57:39 2005 New Revision: 331135 URL: http://svn.apache.org/viewcvs?rev=331135&view=rev Log: Prevented reentrance of AbstractFileConfiguration.reload(), which may cause infinite loops; related to issue 36665 Modified: jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractFileConfiguration.java jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestPropertiesConfiguration.java jakarta/commons/proper/configuration/trunk/xdocs/changes.xml Modified: jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractFileConfiguration.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractFileConfiguration.java?rev=331135&r1=331134&r2=331135&view=diff ============================================================================== --- jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractFileConfiguration.java (original) +++ jakarta/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/AbstractFileConfiguration.java Sun Nov 6 10:57:39 2005 @@ -700,20 +700,29 @@ { synchronized (reloadLock) { - if (noReload == 0 && strategy.reloadingRequired()) + if (noReload == 0) { try { - clear(); - load(); + enterNoReload(); // avoid reentrant calls - // notify the strategy - strategy.reloadingPerformed(); + if (strategy.reloadingRequired()) + { + clear(); + load(); + + // notify the strategy + strategy.reloadingPerformed(); + } } catch (Exception e) { e.printStackTrace(); // todo rollback the changes if the file can't be reloaded + } + finally + { + exitNoReload(); } } } Modified: jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestPropertiesConfiguration.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestPropertiesConfiguration.java?rev=331135&r1=331134&r2=331135&view=diff ============================================================================== --- jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestPropertiesConfiguration.java (original) +++ jakarta/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestPropertiesConfiguration.java Sun Nov 6 10:57:39 2005 @@ -25,6 +25,8 @@ import java.util.Iterator; import java.util.List; +import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy; + import junit.framework.TestCase; /** @@ -417,5 +419,22 @@ + EOL + EOL) == 0); assertTrue("Property could not be found", content .indexOf("prop = value" + EOL) > 0); + } + + /** + * Tests what happens if a reloading strategy's reloadingRequired() + * implementation accesses methods of the configuration that in turn cause a reload. + */ + public void testReentrantReload() + { + conf.setProperty("shouldReload", Boolean.FALSE); + conf.setReloadingStrategy(new FileChangedReloadingStrategy() + { + public boolean reloadingRequired() + { + return configuration.getBoolean("shouldReload"); + } + }); + assertFalse("Property has wrong value", conf.getBoolean("shouldReload")); } } Modified: jakarta/commons/proper/configuration/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/configuration/trunk/xdocs/changes.xml?rev=331135&r1=331134&r2=331135&view=diff ============================================================================== --- jakarta/commons/proper/configuration/trunk/xdocs/changes.xml (original) +++ jakarta/commons/proper/configuration/trunk/xdocs/changes.xml Sun Nov 6 10:57:39 2005 @@ -23,6 +23,11 @@ + + The reload() method in AbstractFileConfiguration was updated to prevent + reentrant invocation, which may be caused by some methods when they + are called during a reloading operation. + AbstractHierarchicalFileConfiguration, a new base class for file based hierarchical configurations, was introduced. XMLConfiguration now --------------------------------------------------------------------- To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org For additional commands, e-mail: commons-dev-help@jakarta.apache.org