public void InitializeAfterFork(Inferior inferior)
        {
            Lock();
            try {
                int[] indices = new int [index_hash.Count];
                index_hash.Keys.CopyTo(indices, 0);

                for (int i = 0; i < indices.Length; i++)
                {
                    int              idx   = indices [i];
                    BreakpointEntry  entry = (BreakpointEntry)index_hash [idx];
                    SourceBreakpoint bpt   = entry.Handle.Breakpoint as SourceBreakpoint;

                    if (!entry.Handle.Breakpoint.ThreadGroup.IsGlobal)
                    {
                        try {
                            inferior.RemoveBreakpoint(idx);
                        } catch (Exception ex) {
                            Report.Error("Removing breakpoint {0} failed: {1}",
                                         idx, ex);
                        }
                    }
                }
            } finally {
                Unlock();
            }
        }
        public void RemoveAllBreakpoints(Inferior inferior)
        {
            Lock();
            try {
                int[] indices = new int [index_hash.Count];
                index_hash.Keys.CopyTo(indices, 0);

                for (int i = 0; i < indices.Length; i++)
                {
                    try {
                        inferior.RemoveBreakpoint(indices [i]);
                    } catch (Exception ex) {
                        Report.Error("Removing breakpoint {0} failed: {1}",
                                     indices [i], ex);
                    }
                }
            } finally {
                Unlock();
            }
        }
        public void DomainUnload(Inferior inferior, int domain)
        {
            Lock();
            try {
                int[] indices = new int [index_hash.Count];
                index_hash.Keys.CopyTo(indices, 0);

                for (int i = 0; i < indices.Length; i++)
                {
                    BreakpointEntry entry = (BreakpointEntry)index_hash [indices [i]];
                    if (entry.Domain != domain)
                    {
                        continue;
                    }
                    inferior.RemoveBreakpoint(indices [i]);
                    index_hash.Remove(indices [i]);
                }
            } finally {
                Unlock();
            }
        }
		public override void Remove (Inferior target)
		{
			if (index > 0)
				target.RemoveBreakpoint (this);
			index = -1;
		}
		public override void Remove (Inferior inferior)
		{
			if (has_breakpoint)
				inferior.RemoveBreakpoint (this);
			has_breakpoint = false;
		}