From f84556b4ebee098ae90d1093fa062b799b9463d6 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Mon, 2 May 2011 20:24:26 +0200 Subject: [PATCH] Thread-safety fix for Cecil when resetting a method body to save memory. --- Mono.Cecil/Mono.Cecil/MethodDefinition.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Mono.Cecil/Mono.Cecil/MethodDefinition.cs b/Mono.Cecil/Mono.Cecil/MethodDefinition.cs index 81a0f1b73..dd9d77e96 100644 --- a/Mono.Cecil/Mono.Cecil/MethodDefinition.cs +++ b/Mono.Cecil/Mono.Cecil/MethodDefinition.cs @@ -133,8 +133,9 @@ namespace Mono.Cecil { public MethodBody Body { get { - if (body != null) - return body; + MethodBody localBody = this.body; + if (localBody != null) + return localBody; if (!HasBody) return null; @@ -144,7 +145,12 @@ namespace Mono.Cecil { return body = new MethodBody (this); } - set { body = value; } + set { + // we reset Body to null in ILSpy to save memory; so we need that operation to be thread-safe + lock (Module.SyncRoot) { + body = value; + } + } } public bool HasPInvokeInfo {