[
https://issues.apache.org/jira/browse/HTTPCLIENT-841?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12699701#action_12699701
]
Sebb commented on HTTPCLIENT-841:
---------------------------------
The implementation is currently difficult to make thread-safe, so removing it
would be good.
If redesigned, it would be good to remove/rework the enableConnectionGC()
method, which can only be called immediately after creating the pool.
The method creates additional instance objects (refQueue and refWorker); if
these could be optionally created at construction time they could be made final
to improve thread-safety. There would still need to be a way to start the
RefQueueWorker thread after the AbstractConnPool was created, but this could be
done by the concrete subclass constructor (as is done now).
> potential memory leak when using ThreadSafeClientConnManager
> ------------------------------------------------------------
>
> Key: HTTPCLIENT-841
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-841
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Affects Versions: 4.0 Beta 2
> Environment: Leopard 10.5.6, Java 1.5.0_16, Jetty 6.1.7
> Reporter: Ted Slusser
> Fix For: 4.0 Beta 3
>
>
> When using ThreadSafeClientConnManager and developing with Jetty using
> auto-redeploy feature eventually I run into a PermGen out of memory
> exception. I investigated with YourKit 8.0.6 and found a class loader
> circular reference in RefQueueWorker. Not really sure what I was doing I
> made the refQueueHandler non-final and nulled it in the shutdown method of
> RedQueueWorker. I don't seem to have the problem any longer with circular
> class loader references.
> Here is a diff from 4.0-beta2
> ---
> httpclient/src/main/java/org/apache/http/impl/conn/tsccm/RefQueueWorker.jav(revision
> 763223)
> +++
> httpclient/src/main/java/org/apache/http/impl/conn/tsccm/RefQueueWorker.jav(working
> copy)
> @@ -50,7 +50,7 @@
> protected final ReferenceQueue<?> refQueue;
>
> /** The handler for the references found. */
> - protected final RefQueueHandler refHandler;
> + protected RefQueueHandler refHandler;
>
>
> /**
> @@ -112,6 +112,8 @@
> this.workerThread = null; // indicate shutdown
> wt.interrupt();
> }
> +
> + refHandler = null;
> }
>
>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]