You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rd...@apache.org on 2005/10/27 00:00:31 UTC

svn commit: r328749 - in /jakarta/commons/proper/pool/trunk: project.xml src/java/org/apache/commons/pool/impl/StackObjectPool.java

Author: rdonkin
Date: Wed Oct 26 15:00:24 2005
New Revision: 328749

URL: http://svn.apache.org/viewcvs?rev=328749&view=rev
Log:
Added missed synchronization. Submitted by Sandy McArthur. Issue #37226. Thanks to Mayur Naik for discovering and reporting these issues.

Modified:
    jakarta/commons/proper/pool/trunk/project.xml
    jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/StackObjectPool.java

Modified: jakarta/commons/proper/pool/trunk/project.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/project.xml?rev=328749&r1=328748&r2=328749&view=diff
==============================================================================
--- jakarta/commons/proper/pool/trunk/project.xml (original)
+++ jakarta/commons/proper/pool/trunk/project.xml Wed Oct 26 15:00:24 2005
@@ -140,6 +140,10 @@
       <name>Todd Carmichael</name>
       <email>toddc@concur.com</email>
     </contributor>
+    <contributor>
+      <name>Sandy McArthur</name>
+      <email>Sandy AT McArthur DOT org</email>
+    </contributor>
   </contributors>
   
   <dependencies>

Modified: jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/StackObjectPool.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/StackObjectPool.java?rev=328749&r1=328748&r2=328749&view=diff
==============================================================================
--- jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/StackObjectPool.java (original)
+++ jakarta/commons/proper/pool/trunk/src/java/org/apache/commons/pool/impl/StackObjectPool.java Wed Oct 26 15:00:24 2005
@@ -138,7 +138,7 @@
         return obj;
     }
 
-    public void returnObject(Object obj) throws Exception {
+    public synchronized void returnObject(Object obj) throws Exception {
         assertOpen();
         boolean success = true;
         if(null != _factory) {
@@ -155,19 +155,17 @@
 
         boolean shouldDestroy = !success;
 
-        synchronized(this) {
-            _numActive--;
-            if (success) {
-                Object toBeDestroyed = null;
-                if(_pool.size() >= _maxSleeping) {
-                    shouldDestroy = true;
-                    toBeDestroyed = _pool.remove(0); // remove the stalest object
-                }
-                _pool.push(obj);
-                obj = toBeDestroyed; // swap returned obj with the stalest one so it can be destroyed
+        _numActive--;
+        if (success) {
+            Object toBeDestroyed = null;
+            if(_pool.size() >= _maxSleeping) {
+                shouldDestroy = true;
+                toBeDestroyed = _pool.remove(0); // remove the stalest object
             }
-            notifyAll(); // _numActive has changed
+            _pool.push(obj);
+            obj = toBeDestroyed; // swap returned obj with the stalest one so it can be destroyed
         }
+        notifyAll(); // _numActive has changed
 
         if(shouldDestroy) { // by constructor, shouldDestroy is false when _factory is null
             try {
@@ -187,12 +185,12 @@
         notifyAll(); // _numActive has changed
     }
 
-    public int getNumIdle() {
+    public synchronized int getNumIdle() {
         assertOpen();
         return _pool.size();
     }
 
-    public int getNumActive() {
+    public synchronized int getNumActive() {
         assertOpen();
         return _numActive;
     }
@@ -212,7 +210,7 @@
         _pool.clear();
     }
 
-    synchronized public void close() throws Exception {
+    public synchronized void close() throws Exception {
         clear();
         _pool = null;
         _factory = null;
@@ -224,15 +222,14 @@
      * addObject() is useful for "pre-loading" a pool with idle objects.
      * @throws Exception when the {@link #_factory} has a problem creating an object.
      */
-    public void addObject() throws Exception {
+    public synchronized void addObject() throws Exception {
+        assertOpen();
         Object obj = _factory.makeObject();
-        synchronized(this) {
-            _numActive++;   // A little slimy - must do this because returnObject decrements it.
-            this.returnObject(obj);
-        }
+        _numActive++;   // A little slimy - must do this because returnObject decrements it.
+        this.returnObject(obj);
     }
 
-    synchronized public void setFactory(PoolableObjectFactory factory) throws IllegalStateException {
+    public synchronized void setFactory(PoolableObjectFactory factory) throws IllegalStateException {
         assertOpen();
         if(0 < getNumActive()) {
             throw new IllegalStateException("Objects are already active");



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org