The borrowObject methods in StackObjectPool, SoftReferenceObjectPool are synchronized and do not bound the number of attempts to create a valid instance when the pool is exhausted. When a new instance is created, if activation or validation fails, the code continues (without bound) to retry the make-activate-validate sequence. This can lead to an infinite loop if the factory is unable to create valid instances.
Description
The borrowObject methods in StackObjectPool, SoftReferenceObjectPool are synchronized and do not bound the number of attempts to create a valid instance when the pool is exhausted. When a new instance is created, if activation or validation fails, the code continues (without bound) to retry the make-activate-validate sequence. This can lead to an infinite loop if the factory is unable to create valid instances.