[armedbear-devel] Space leak due to threads stuck in LispThread map

Pendergrass, James A. James.Pendergrass at jhuapl.edu
Thu Jul 19 20:16:25 UTC 2012


Hello all,
I'm having some trouble with space leakage that looks to be because the static map in LispThread isn't letting go of completed JavaThreads.  Basically what I'm doing on the Java side looks like:

> class Foo {
> 	public static int main(){
> 		manager = new Manager();
> 		fun     = getLispFunction("processResults");
> 
> 		new Thread() {
> 			public void run() {
> 				LispObject res = generateSomeLisp();
> 				fun.execute(manager, res);
> 			}.run();
> 		manager = null;
> 		while(1);
> 	}
> }
		
The lisp side looks like:

> (defun processResults (manager res)
> 	(let ((*manager* manager))
> 	   (declare (special *manager*))
> 	   (eval res)))

But the manager never gets destroyed.  I used the eclipse Java Memory Analysis tool to track this down to the created JavaThread being referenced as a key in the static map variable in LispThread.

Any suggestions on how to get around this?  The whole code base is pretty memory intensive so garbage collecting that manager is really a must (and cleaning up the thread is probably a good plan too).

Thanks,
-Aaron





More information about the armedbear-devel mailing list