2007-11-07 Igor Zelmanovich <igorz@mainsoft.com>
[mono.git] / mcs / class / System.Web / System.Web.Caching / CacheDependency.cs
index 11aa84feaa83f53d8d90351945429cd6152c2e7c..03794c6e89868a9190f09df2f4f5f209dc9c4873 100644 (file)
@@ -148,9 +148,14 @@ namespace System.Web.Caching
 #endif
                
                void OnChanged (object sender, FileSystemEventArgs args)
+               {
+                       OnDependencyChanged (sender, args);
+               }
+
+               bool DoOnChanged ()
                {
                        if (DateTime.Now < start)
-                               return;
+                               return false;
                        hasChanged = true;
 #if NET_2_0
                        utcLastModified = DateTime.UtcNow;
@@ -159,8 +164,10 @@ namespace System.Web.Caching
                        
                        if (cache != null)
                                cache.CheckExpiration ();
+
+                       return true;
                }
-       
+               
                void DisposeWatchers ()
                {
                        lock (locker) {
@@ -178,11 +185,20 @@ namespace System.Web.Caching
                        DependencyDispose ();
                }
 
+#if NET_2_0
+               internal virtual void DependencyDisposeInternal ()
+               {
+               }
+#endif
+               
 #if NET_2_0
                protected virtual
 #endif
                void DependencyDispose () 
                {
+#if NET_2_0
+                       DependencyDisposeInternal ();
+#endif
                        DisposeWatchers ();
                        if (dependency != null)
                                dependency.DependencyChanged -= new EventHandler (OnChildDependencyChanged);
@@ -222,7 +238,6 @@ namespace System.Web.Caching
                {
                        this.utcLastModified = utcLastModified;
                }
-
 #endif
                
                public bool HasChanged {
@@ -256,8 +271,14 @@ namespace System.Web.Caching
                
                void OnDependencyChanged (object sender, EventArgs e)
                {
-                       if (DependencyChanged != null)
-                               DependencyChanged (sender, e);
+                       if (!DoOnChanged ())
+                               return;
+                       
+                       if (DependencyChanged == null)
+                               return;
+
+                       foreach (EventHandler eh in DependencyChanged.GetInvocationList ())
+                               eh (sender, e);
                }
                
 #if NET_2_0