In my case, I can easily reproduce it by running my LISP into the Visual Studio debugger and run the apropos example. On exit, I'm warned by the debugger about the access violation. Note
that if I run
the LISP outside the debugger, I'm not notified at all.
I just tried with VS 2003. I started LispWorks 5.0, then attached the VS debugger to LW, then loaded RDNZL, then loaded and ran the apropos example. Finally, I quit LispWorks. I didn't get any messages, though. Maybe this only happens with .NET 2.0? Or is it specific to ECL? Or do I have to do something else? I'm not familiar with the VS debugger.
Nevertheless, it's pretty disturbing that DelegateAdapter objects are /never/ released... :(
I don't know if this specific to .NET 2.0. There are so many different parameters, it's difficult to tell. Can you trace whether your .NET objects referenced in LISP get collected or not? In the case of the apropos example, it appears that the KeyPressEventHandler object never got collected in the LISP world.
Michael.
On Tue, 26 Sep 2006 16:33:50 +0200, "Goffioul Michael" goffioul@imec.be wrote:
Can you trace whether your .NET objects referenced in LISP get collected or not? In the case of the apropos example, it appears that the KeyPressEventHandler object never got collected in the LISP world.
I tried with LW 5.0, the most recent version of RDNZL (0.10.6) and the corresponding DLL (created with VS 2003). If I run the apropos example and then call (HCL:MARK-AND-SWEEP 3), the KeyPressEventHandler is clearly collected on the Lisp side.
Methodology: I simply added a PRINT statement to MAYBE-FREE-CONTAINER-POINTER, so I could see which objects are about to be handed over to freeDotNetContainer. Below is the list I got.
But wait - you're talking about ECL, right? FLAG-FOR-FINALIZATION isn't yet implemented for ECL, so you can't expect freeDotNetContainer to be called in this case, can you?
#<RDNZL::CONTAINER System.Type #x1094540> #<RDNZL::CONTAINER System.Type #x1094500> #<RDNZL::CONTAINER System.Boolean #x10944C0> #<RDNZL::CONTAINER AproposGUI.AproposControl #x10944A0> #<RDNZL::CONTAINER System.Type #x10944D0> #<RDNZL::CONTAINER System.Type #x1094310> #<RDNZL::CONTAINER System.Boolean #x10942D0> #<RDNZL::CONTAINER System.Windows.Forms.Form #x10940E8> #<RDNZL::CONTAINER System.Type #x10942E0> #<RDNZL::CONTAINER System.Windows.Forms.DockStyle #x10940B8> #<RDNZL::CONTAINER System.Drawing.Size #x1094088> #<RDNZL::CONTAINER System.Windows.Forms.Label #x10940C8> #<RDNZL::CONTAINER System.Windows.Forms.TextBox #x1094008> #<RDNZL::CONTAINER System.Type #x1093F90> #<RDNZL::CONTAINER System.Type #x1093FC0> #<RDNZL::CONTAINER System.Boolean #x1093E80> #<RDNZL::CONTAINER System.Reflection.MethodInfo #x1093EC0> #<RDNZL::CONTAINER System.Type #x1093F60> #<RDNZL::CONTAINER System.Reflection.ParameterInfo[] #x1093DF0> #<RDNZL::CONTAINER System.Int32 #x1093E90> #<RDNZL::CONTAINER System.Reflection.ParameterInfo #x1093E30> #<RDNZL::CONTAINER System.Reflection.ParameterInfo #x1093D60> #<RDNZL::CONTAINER System.Type #x1093E00> #<RDNZL::CONTAINER System.Type #x1093DA0> #<RDNZL::CONTAINER System.Type #x1093F30> #<RDNZL::CONTAINER System.String #x1093D70> #<RDNZL::CONTAINER System.Type #x1093D50> #<RDNZL::CONTAINER System.Type[] #x1093CE0> #<RDNZL::CONTAINER System.String #x1093CA0> #<RDNZL::CONTAINER System.String #x1093CB0> #<RDNZL::CONTAINER System.String #x1092CE8> #<RDNZL::CONTAINER System.Type #x1093D20> #<RDNZL::CONTAINER System.Boolean #x10956F8> #<RDNZL::CONTAINER RDNZLPrivateAssembly._LispCallback_1 #x1094520> #<RDNZL::CONTAINER System.String #x1095718> #<RDNZL::CONTAINER System.String #x10954E8> #<RDNZL::CONTAINER System.Type #x10954D8> #<RDNZL::CONTAINER System.Boolean #x1095268> #<RDNZL::CONTAINER System.Type #x1095128> #<RDNZL::CONTAINER System.Reflection.MethodInfo #x1094E90> #<RDNZL::CONTAINER System.RuntimeMethodHandle #x1095258> #<RDNZL::CONTAINER System.IntPtr #x1094D50> #<RDNZL::CONTAINER System.Windows.Forms.KeyPressEventHandler #x1095488> #<RDNZL::CONTAINER System.Windows.Forms.Control+ControlCollection #x10953C8> #<RDNZL::CONTAINER System.Type #x1094E80> #<RDNZL::CONTAINER System.Object[] #x1095418> #<RDNZL::CONTAINER System.Int32 #x1095508> #<RDNZL::CONTAINER System.Object #x1095538> #<RDNZL::CONTAINER System.Windows.Forms.KeyPressEventArgs #x1095578> #<RDNZL::CONTAINER System.Char #x1094920> #<RDNZL::CONTAINER NULL #x1094910> #<RDNZL::CONTAINER System.Object[] #x1094970> #<RDNZL::CONTAINER System.Int32 #x10949B0> #<RDNZL::CONTAINER System.Object #x1095298> #<RDNZL::CONTAINER System.Windows.Forms.KeyPressEventArgs #x10952D8> #<RDNZL::CONTAINER System.Char #x1095318> #<RDNZL::CONTAINER NULL #x1095308> #<RDNZL::CONTAINER System.Object[] #x1095368> #<RDNZL::CONTAINER System.Int32 #x1095178> #<RDNZL::CONTAINER System.Object #x10951A8> #<RDNZL::CONTAINER System.Windows.Forms.KeyPressEventArgs #x10951E8> #<RDNZL::CONTAINER System.Char #x1095228> #<RDNZL::CONTAINER NULL #x1095218> #<RDNZL::CONTAINER System.Object[] #x1095048> #<RDNZL::CONTAINER System.Int32 #x1095088> #<RDNZL::CONTAINER System.Windows.Forms.TextBox #x10950B8> #<RDNZL::CONTAINER System.Windows.Forms.KeyPressEventArgs #x1094EB0> #<RDNZL::CONTAINER System.Char #x1094EF0> #<RDNZL::CONTAINER System.String #x1094F30> #<RDNZL::CONTAINER AproposGUI.AproposControl #x1094F60> #<RDNZL::CONTAINER System.Windows.Forms.TextBox #x1094D70> #<RDNZL::CONTAINER System.Int32 #x1094F90> #<RDNZL::CONTAINER System.Int32 #x1094DD0> #<RDNZL::CONTAINER System.String #x1094E00> #<RDNZL::CONTAINER System.String #x1094DC0> #<RDNZL::CONTAINER System.Int32 #x10955B8> #<RDNZL::CONTAINER NULL #x1094E50>