public void flush() { 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()) { obj.Store(); } } else if (e.dirty != 0) { goto waitFinalization; } } } return; } waitFinalization: GC.WaitForPendingFinalizers(); } }