LeoWoerteler commented on code in PR #1380:
URL: https://github.com/apache/cxf/pull/1380#discussion_r1292437604


##########
rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java:
##########
@@ -303,19 +303,34 @@ protected OutputStream createOutputStream(Message 
message, boolean needToCacheRe
      * This class <i>must</i> be static so it doesn't capture a reference to 
{@code HttpClientHTTPConduit.this} and
      * through that to {@link HttpClientHTTPConduit#client}. Otherwise the 
client can never be garbage collected, which
      * means that the companion "SelectorManager" thread keeps running 
indefinitely (see CXF-8885).
+     * <p>
+     * The {@link HTTPClientPolicy} must be copied here because its property 
change listeners can still have hard
+     * references to the {@code HttpClientHTTPConduit}.
      */
     private static final class ProxyFactoryProxySelector extends ProxySelector 
{
         private final ProxyFactory proxyFactory;
-        private final HTTPClientPolicy csPolicy;
+        private final HTTPClientPolicy clientPolicy;
 
         ProxyFactoryProxySelector(ProxyFactory proxyFactory, HTTPClientPolicy 
csPolicy) {
             this.proxyFactory = proxyFactory;
-            this.csPolicy = csPolicy;
+            this.clientPolicy = new HTTPClientPolicy();

Review Comment:
   @reta I've figured it out, it turns out I mixed up `SoftReference` and 
`WeakReference`. Softly referenced objects are only garbage collected as a last 
resort before OOM, while weak references objects are ignored completely by the 
GC. I've opened PR #1381 as an alternative to this PR, feel free to reject the 
one you like less of the two.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@cxf.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to