edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyLibraryMethodInfo.cs;C735797
File: RubyLibraryMethodInfo.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyLibraryMethodInfo.cs;C735797  (server)    1/27/2009 4:57 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyLibraryMethodInfo.cs;ThreadSafetyFix
@@ -69,7 +69,9 @@
         internal protected override MethodBase/*!*/[]/*!*/ MethodBases {
             get {
                 Debug.Assert(base.MethodBases != null || _overloads != null);
-                return base.MethodBases ?? SetMethodBases(_overloads.ConvertAll((d) => d.Method));
+
+                // don't need to lock MethodBases since all values calculated by multiple threads are the same: 
+                return base.MethodBases ?? SetMethodBasesNoLock(_overloads.ConvertAll((d) => d.Method));
             }
         }
 
===================================================================
edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupBase.cs;C735797
File: RubyMethodGroupBase.cs
===================================================================
--- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupBase.cs;C735797  (server)    1/27/2009 4:56 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/Calls/RubyMethodGroupBase.cs;ThreadSafetyFix
@@ -47,12 +47,13 @@
     /// Currently this is used for all builtin libary methods and interop calls to CLR methods
     /// </summary>
     public abstract class RubyMethodGroupBase : RubyMemberInfo {
+        // Not protected by a lock. Immutable after initialized. 
         private MethodBase/*!*/[] _methodBases;
         
         protected RubyMethodGroupBase(MethodBase/*!*/[] methods, RubyMemberFlags flags, RubyModule/*!*/ declaringModule)
             : base(flags, declaringModule) {
             if (methods != null) {
-                SetMethodBases(methods);
+                SetMethodBasesNoLock(methods);
             }
         }
 
@@ -62,9 +63,7 @@
             get { return _methodBases; }
         }
 
-        protected MethodBase/*!*/[]/*!*/ SetMethodBases(MethodBase/*!*/[]/*!*/ methods) {
-            Debug.Assert(_methodBases == null);
-
+        internal MethodBase/*!*/[]/*!*/ SetMethodBasesNoLock(MethodBase/*!*/[]/*!*/ methods) {
             // either all methods in the group are static or instance, a mixture is not allowed:
             Debug.Assert(
                 CollectionUtils.TrueForAll(methods, (method) => method.IsStatic) ||
===================================================================
