I will revert this if there are objections or failures on other
JDKs.  If there are no objections or failures, I will do the same
for GKOP tests.  All current tests pass for me, but the added
synchronization may make them less sensitive, so we may wish
document lack of thread safety instead and revert.  I can see both
sides of this.

I did not fully synchronize any of the factory methods, even though
for activate and validate in their current form, the effect would be
the same. The reason for this is that we may want to add
configurable latency to these methods and we don't want the waits to
lock the factory.

Thanks in advance for review / comments or even vetos ;)

Phil

pste...@apache.org wrote:
> Author: psteitz
> Date: Sun Apr 18 15:59:27 2010
> New Revision: 935362
> 
> URL: http://svn.apache.org/viewvc?rev=935362&view=rev
> Log:
> Made SimpleFactory threadsafe.
> 
> Modified:
>     
> commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericObjectPool.java
> 
> Modified: 
> commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericObjectPool.java
> URL: 
> http://svn.apache.org/viewvc/commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericObjectPool.java?rev=935362&r1=935361&r2=935362&view=diff
> ==============================================================================
> --- 
> commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericObjectPool.java
>  (original)
> +++ 
> commons/proper/pool/trunk/src/test/org/apache/commons/pool/impl/TestGenericObjectPool.java
>  Sun Apr 18 15:59:27 2010
> @@ -1332,26 +1332,26 @@ public class TestGenericObjectPool exten
>              evenValid = evalid;
>              oddValid = ovalid;
>          }
> -        void setValid(boolean valid) {
> +        public synchronized void setValid(boolean valid) {
>              setEvenValid(valid);
>              setOddValid(valid);            
>          }
> -        void setEvenValid(boolean valid) {
> +        public synchronized void setEvenValid(boolean valid) {
>              evenValid = valid;
>          }
> -        void setOddValid(boolean valid) {
> +        public synchronized void setOddValid(boolean valid) {
>              oddValid = valid;
>          }
> -        public void setThrowExceptionOnPassivate(boolean bool) {
> +        public synchronized void setThrowExceptionOnPassivate(boolean bool) {
>              exceptionOnPassivate = bool;
>          }
> -        public void setMaxActive(int maxActive) {
> +        public synchronized void setMaxActive(int maxActive) {
>              this.maxActive = maxActive;
>          }
> -        public void setDestroyLatency(long destroyLatency) {
> +        public synchronized void setDestroyLatency(long destroyLatency) {
>              this.destroyLatency = destroyLatency;
>          }
> -        public void setMakeLatency(long makeLatency) {
> +        public synchronized void setMakeLatency(long makeLatency) {
>              this.makeLatency = makeLatency;
>          }
>          public Object makeObject() { 
> @@ -1365,36 +1365,70 @@ public class TestGenericObjectPool exten
>              if (makeLatency > 0) {
>                  doWait(makeLatency);
>              }
> -            return String.valueOf(makeCounter++);
> +            int counter;
> +            synchronized(this) {
> +                counter = makeCounter++;
> +            }
> +            return String.valueOf(counter);
>          }
>          public void destroyObject(Object obj) throws Exception {
> -            if (destroyLatency > 0) {
> +            boolean wait;
> +            boolean hurl;
> +            synchronized(this) {
> +                wait = destroyLatency > 0;
> +                hurl = exceptionOnDestroy;
> +            }
> +            if (wait) {
>                  doWait(destroyLatency);
>              }
>              synchronized(this) {
>                  activeCount--;
>              }
> -            if (exceptionOnDestroy) {
> +            if (hurl) {
>                  throw new Exception();
>              }
>          }
>          public boolean validateObject(Object obj) {
> -            if (enableValidation) { 
> -                return validateCounter++%2 == 0 ? evenValid : oddValid; 
> +            boolean validate;
> +            boolean evenTest;
> +            boolean oddTest;
> +            int counter;
> +            synchronized(this) {
> +                validate = enableValidation;
> +                evenTest = evenValid;
> +                oddTest = oddValid;
> +                counter = validateCounter++;
> +            }
> +            if (validate) { 
> +                return counter%2 == 0 ? evenTest : oddTest; 
>              }
>              else {
>                  return true;
>              }
>          }
>          public void activateObject(Object obj) throws Exception {
> -            if (exceptionOnActivate) {
> -                if (!(validateCounter++%2 == 0 ? evenValid : oddValid)) {
> +            boolean hurl;
> +            boolean evenTest;
> +            boolean oddTest;
> +            int counter;
> +            synchronized(this) {
> +                hurl = exceptionOnActivate;
> +                evenTest = evenValid;
> +                oddTest = oddValid;
> +                counter = validateCounter++;
> +            }
> +            if (hurl) {
> +                if (!(counter%2 == 0 ? evenTest : oddTest)) {
>                      throw new Exception();
>                  }
>              }
>          }
>          public void passivateObject(Object obj) throws Exception {
> -            if(exceptionOnPassivate) {
> +            boolean hurl;
> +            synchronized(this) {
> +                hurl = exceptionOnPassivate;
> +            }
> +            if (hurl) {
>                  throw new Exception();
>              }
>          }
> @@ -1411,23 +1445,23 @@ public class TestGenericObjectPool exten
>          long makeLatency = 0;
>          int maxActive = Integer.MAX_VALUE;
>  
> -        public boolean isThrowExceptionOnActivate() {
> +        public synchronized boolean isThrowExceptionOnActivate() {
>              return exceptionOnActivate;
>          }
>  
> -        public void setThrowExceptionOnActivate(boolean b) {
> +        public synchronized void setThrowExceptionOnActivate(boolean b) {
>              exceptionOnActivate = b;
>          }
>          
> -        public void setThrowExceptionOnDestroy(boolean b) {
> +        public synchronized void setThrowExceptionOnDestroy(boolean b) {
>              exceptionOnDestroy = b;
>          }
>  
> -        public boolean isValidationEnabled() {
> +        public synchronized boolean isValidationEnabled() {
>              return enableValidation;
>          }
>  
> -        public void setValidationEnabled(boolean b) {
> +        public synchronized void setValidationEnabled(boolean b) {
>              enableValidation = b;
>          }
>          
> 
> 


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

Reply via email to