X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fmetadata.c;h=b778e3964c6671db6efa1ab09eb69e10035b0521;hb=56ad8f4e5dfb8198e4671f631a3103b1e8b83dd3;hp=73f60caca141753eaab42cdef4d3fa8fd0d2d061;hpb=6ce453f2cf8299a516e818ac287c07c35d8767e5;p=mono.git diff --git a/mono/metadata/metadata.c b/mono/metadata/metadata.c index 73f60caca14..b778e3964c6 100644 --- a/mono/metadata/metadata.c +++ b/mono/metadata/metadata.c @@ -1838,8 +1838,11 @@ mono_metadata_parse_signature (MonoImage *image, guint32 token) guint32 sig; const char *ptr; - if (image_is_dynamic (image)) - return (MonoMethodSignature *)mono_lookup_dynamic_token (image, token, NULL); + if (image_is_dynamic (image)) { + ret = (MonoMethodSignature *)mono_lookup_dynamic_token (image, token, NULL, &error); + mono_error_raise_exception (&error); /* FIXME don't raise here */ + return ret; + } g_assert (mono_metadata_token_table(token) == MONO_TABLE_STANDALONESIG); @@ -2773,18 +2776,6 @@ free_inflated_method (MonoMethodInflated *imethod) if (method->signature) mono_metadata_free_inflated_signature (method->signature); - if (!((method->flags & METHOD_ATTRIBUTE_ABSTRACT) || (method->iflags & METHOD_IMPL_ATTRIBUTE_RUNTIME) || (method->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL) || (method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL))) { - MonoMethodHeader *header = imethod->header; - - if (header) { - /* Allocated in inflate_generic_header () */ - for (i = 0; i < header->num_locals; ++i) - mono_metadata_free_type (header->locals [i]); - g_free (header->clauses); - g_free (header); - } - } - g_free (method); } @@ -3386,6 +3377,10 @@ do_mono_metadata_parse_type (MonoType *type, MonoImage *m, MonoGenericContainer return FALSE; type->data.klass = mono_class_from_mono_type (etype); + + if (transient) + mono_metadata_free_type (etype); + g_assert (type->data.klass); //This was previously a check for NULL, but mcfmt should never fail. It can return a borken MonoClass, but should return at least something. break; }