Merge pull request #298 from ermshiperete/4921
[mono.git] / mono / mini / declsec.c
index e9925816145b5aa06be65aba28293d46a409686b..be7feebe79b4a8bc7981239874f45ee257226274 100644 (file)
@@ -17,9 +17,9 @@
 MonoBoolean
 mono_method_has_declsec (MonoMethod *method)
 {
-       mono_jit_stats.cas_declsec_check++;
+       InterlockedIncrement (&mono_jit_stats.cas_declsec_check);
 
-       if (method->wrapper_type == MONO_WRAPPER_MANAGED_TO_NATIVE) {
+       if (method->wrapper_type == MONO_WRAPPER_MANAGED_TO_NATIVE || method->wrapper_type == MONO_WRAPPER_MANAGED_TO_MANAGED) {
                method = mono_marshal_method_from_wrapper (method);
                if (!method)
                        return FALSE;
@@ -116,7 +116,7 @@ mono_declsec_linkdemand_standard (MonoDomain *domain, MonoMethod *caller, MonoMe
 {
        MonoDeclSecurityActions linkclass, linkmethod;
 
-       mono_jit_stats.cas_linkdemand++;
+       InterlockedIncrement (&mono_jit_stats.cas_linkdemand);
 
        if (mono_declsec_get_linkdemands (callee, &linkclass, &linkmethod)) {
                MonoAssembly *assembly = mono_image_get_assembly (caller->klass->image);
@@ -190,7 +190,7 @@ mono_declsec_linkdemand_aptc (MonoDomain *domain, MonoMethod *caller, MonoMethod
        MonoAssembly *assembly;
        guint32 size = 0;
 
-       mono_jit_stats.cas_linkdemand_aptc++;
+       InterlockedIncrement (&mono_jit_stats.cas_linkdemand_aptc);
 
        /* A - Applicable only if we're calling into *another* assembly */
        if (caller->klass->image == callee->klass->image)
@@ -214,6 +214,8 @@ mono_declsec_linkdemand_aptc (MonoDomain *domain, MonoMethod *caller, MonoMethod
                        /* look for AllowPartiallyTrustedCallersAttribute */
                        result = mono_custom_attrs_has_attr (cinfo, secman->allowpartiallytrustedcallers);
                }
+               if (cinfo)
+                       mono_custom_attrs_free (cinfo);
                MONO_SECMAN_FLAG_SET_VALUE (assembly->aptc, result);
        }
 
@@ -260,7 +262,7 @@ mono_declsec_linkdemand_pinvoke (MonoDomain *domain, MonoMethod *caller, MonoMet
 {
        MonoAssembly *assembly = mono_image_get_assembly (caller->klass->image);
 
-       mono_jit_stats.cas_linkdemand_pinvoke++;
+       InterlockedIncrement (&mono_jit_stats.cas_linkdemand_pinvoke);
 
        /* Check for P/Invoke flag for the assembly */
        if (!MONO_SECMAN_FLAG_INIT (assembly->unmanaged)) {
@@ -319,7 +321,7 @@ mono_declsec_linkdemand_icall (MonoDomain *domain, MonoMethod *caller, MonoMetho
 {
        MonoAssembly *assembly;
 
-       mono_jit_stats.cas_linkdemand_icall++;
+       InterlockedIncrement (&mono_jit_stats.cas_linkdemand_icall);
 
        /* check if the _icall_ is defined inside an ECMA signed assembly */
        assembly = mono_image_get_assembly (icall->klass->image);