Ejemplo n.º 1
0
        public void invalidate()
        {
            while (true)
            {
                lock (this)
                {
                    for (int i = 0; i < table.Length; i++)
                    {
                        for (Entry e = table[i]; e != null; e = e.next)
                        {
                            IPersistent obj = (IPersistent)e.oref.Target;
                            if (obj != null)
                            {
                                if (obj.IsModified())
                                {
                                    e.dirty = 0;
                                    obj.Invalidate();
                                }
                            }
                            else if (e.dirty != 0)
                            {
                                goto waitFinalization;
                            }
                        }
                        table[i] = null;
                    }
                    count = 0;
                    return;
                }
waitFinalization:
                GC.WaitForPendingFinalizers();
            }
        }