Ver Fonte

2007-10-15 Dick Porter <[email protected]>

	* Thread.cs: Initialise synch_cs to null now we aren't using it as
	a monitor lock


svn path=/trunk/mcs/; revision=87515
Dick Porter há 18 anos atrás
pai
commit
df3e7290d7

+ 5 - 0
mcs/class/corlib/System.Threading/ChangeLog

@@ -1,3 +1,8 @@
+2007-10-15  Dick Porter  <[email protected]>
+
+	* Thread.cs: Initialise synch_cs to null now we aren't using it as
+	a monitor lock
+
 2007-09-25  Dick Porter  <[email protected]>
 
 	* Thread.cs: Keep ManagedThreadId constant over the lifetime of a

+ 7 - 2
mcs/class/corlib/System.Threading/Thread.cs

@@ -88,8 +88,8 @@ namespace System.Threading {
 		private IntPtr suspend_event;
 		private IntPtr suspended_event;
 		private IntPtr resume_event;
-		/* Don't lock on synch_lock in managed code, since it can result in deadlocks */
-		private object synch_lock = new Object();
+		/* Don't lock on synch_cs in managed code, since it can result in deadlocks */
+		private object synch_cs = null;
 		private IntPtr serialized_culture_info;
 		private int serialized_culture_info_len;
 		private IntPtr serialized_ui_culture_info;
@@ -296,6 +296,9 @@ namespace System.Threading {
 		[MethodImplAttribute(MethodImplOptions.InternalCall)]
 		private extern IntPtr Thread_internal (MulticastDelegate start);
 
+		[MethodImplAttribute(MethodImplOptions.InternalCall)]
+		private extern void Thread_init ();
+
 		private static int GetNewManagedId() {
 			return Interlocked.Increment(ref _managed_id_counter);
 		}
@@ -305,6 +308,8 @@ namespace System.Threading {
 				throw new ArgumentNullException("Null ThreadStart");
 			}
 			threadstart=start;
+
+			Thread_init ();
 			managed_id=GetNewManagedId();
 		}