2008-05-30 Marek Habersack <mhabersack@novell.com>
authorMarek Habersack <grendel@twistedcode.net>
Fri, 30 May 2008 23:23:26 +0000 (23:23 -0000)
committerMarek Habersack <grendel@twistedcode.net>
Fri, 30 May 2008 23:23:26 +0000 (23:23 -0000)
* Constraint.cs: do not use synthetized event accessors (to avoid
locks).

svn path=/trunk/mcs/; revision=104572

mcs/class/System.Data/System.Data/ChangeLog
mcs/class/System.Data/System.Data/Constraint.cs

index 08b5f89c41dc70e4d2ddb6487b1daf609207abfb..49d2445abd45ff8b2bd6ca069a80f9a5d61e0ccf 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-30  Marek Habersack  <mhabersack@novell.com>
+
+       * Constraint.cs: do not use synthetized event accessors (to avoid
+       locks).
+
 2008-05-29  Marek Habersack  <mhabersack@novell.com>
 
        * DataColumn.cs: do not use synthetic methods for events - this
index 09e174787cf0d43e98ee1527f84859054bf288f5..599cdf59f130a412d1ff0b8d71e9cc697ced525d 100644 (file)
@@ -52,7 +52,14 @@ namespace System.Data {
        [TypeConverterAttribute (typeof (ConstraintConverter))]
        public abstract class Constraint 
        {
-               internal event DelegateConstraintNameChange BeforeConstraintNameChange;
+               static readonly object beforeConstraintNameChange = new object ();
+
+               EventHandlerList events = new EventHandlerList ();
+               
+               internal event DelegateConstraintNameChange BeforeConstraintNameChange {
+                       add { events.AddHandler (beforeConstraintNameChange, value); }
+                       remove { events.RemoveHandler (beforeConstraintNameChange, value); }
+               }
 
                //if constraintName is not set then a name is 
                //created when it is added to
@@ -123,10 +130,9 @@ namespace System.Data {
                
                private void _onConstraintNameChange (string newName)
                {
-                       if (null != BeforeConstraintNameChange)
-                       {
-                               BeforeConstraintNameChange (this, newName);
-                       }
+                       DelegateConstraintNameChange eh = events [beforeConstraintNameChange] as DelegateConstraintNameChange;
+                       if (eh != null)
+                               eh (this, newName);
                }
 
                //call once before adding a constraint to a collection