Package: mono-jit Version: 1.2.4-4 Severity: minor Tags: patch upstream fixed-upstream
When passing delegates to unmanaged code under certain circumstances, a small memory leak can result. If many such calls are made in a short period time this can be a serious issue. This was reported to the Ximian Bugzilla and was later fixed in SVN; I have attached the appropriate diff, excluding the changes to a ChangeLog as this causes the patch to fail against the source deb. I am suggesting that this patch be included in Debian's build because it affects at least every Gtk# application that uses GLib.Idle. -- Chris Howie http://www.chrishowie.com http://en.wikipedia.org/wiki/User:Crazycomputers -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/IT d-(--) s:- a-->? C++(+++)$> UL++++ P++++$ L+++>++++ E--- W++ N o++ K? w--$ O M- V- PS--(---) PE++ Y+ PGP++ t+ 5? X- R(+)>- tv-(--) b- DI+> D++ G>+++ e>++ h(--)>--- !r>+++ y->+++ ------END GEEK CODE BLOCK------
Index: mono/metadata/loader.c =================================================================== --- mono/metadata/loader.c (revision 79000) +++ mono/metadata/loader.c (revision 79001) @@ -1537,17 +1537,11 @@ g_free ((char*)method->name); if (mw->method.header) g_free ((char*)mw->method.header->code); + g_free (mw->method.header); g_free (mw->method_data); - } - - if (method->dynamic && !(method->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL) && ((MonoMethodNormal *)method)->header) { - /* FIXME: Ditto */ - /* mono_metadata_free_mh (((MonoMethodNormal *)method)->header); */ - g_free (((MonoMethodNormal*)method)->header); - } - - if (method->dynamic) + g_free (method->signature); g_free (method); + } } void Index: mono/metadata/marshal.c =================================================================== --- mono/metadata/marshal.c (revision 79000) +++ mono/metadata/marshal.c (revision 79001) @@ -8787,7 +8787,11 @@ /* we copy the signature, so that we can modify it */ - csig = signature_dup (method->klass->image, sig); + if (this) + /* Need to free this later */ + csig = mono_metadata_signature_dup (sig); + else + csig = signature_dup (method->klass->image, sig); csig->hasthis = 0; csig->pinvoke = 1;
signature.asc
Description: OpenPGP digital signature