What was the date of that snapshot? It looks like there's a fix as of June 11, revision 6696 in svn.
But (talking to Jerome and Thierry now) I'm a little worried that this fix isn't really addressing the heart of the problem. In particular, the use of thread pool per BaseHelper instance prevents efficient re-use of threads in the JVM. Also, defaulting coreThreads=1 and maxThreads=255 with a SynchronousQueue seems like it's asking for trouble with CPU count << 255. What about a bounded queue with high capacity to get through the bursts, but keep the pool size to some small multiple of the CPU count? Remember that core size is _not_ really min size. (And a minor nit: BaseHelper.workerService is a volatile instance field, so visibility isn't problem, but there are some atomicity issues -- at init time and shutdown time. Fix to the latter just means copying volatile value to local variable before testing and using. Fixing former ... needs some thought. Maybe it's OK as is.) --tim On Tue, Jun 22, 2010 at 6:02 AM, Nina Jeliazkova <[email protected]> wrote: > Hello All, > > I am experiencing memory/thread leak ,with Restlet-2.0-RC4 and > Restlet-2.0-SNAPSHOT , when using ClientResource . Basically, ClientResource > doesn't close the thread it spawns and this result in number of inactive > threads and severe memory leak. > > Here is some very simple code to illustrate this behaviour. The same code > runs fine in Restlet-2.0-M6 (which doesn't span new thread in > ClientResource). > > public void run(int instances) throws Exception { > > for (int i=0; i < instances;i++) { > ClientResource clientResource = null; > Representation r = null; > try { > clientResource = new > ClientResource("http://restlet.org"<http://restlet.org> > ); > r = clientResource.get(); > } finally { > try { r.release(); } catch (Exception x) {} > try { clientResource.release(); } catch (Exception x) {} > } > } > } > > public static void main(String[] args) throws Exception { > ThreadTest test = new ThreadTest(); > test.run(1000); > } > > > I guess there might be something missing in the code to explicitly close > threads, but since the same code runs fine in M6, it is quite confusing to > experience leaks after upgrade. > > Best regards, > Nina Jeliazkova > > P.S. Inactive threads while executing the example above > > > ------------------------------------------------------ http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2625729

