Example #1
0
        void DoDispose()
        {
            if (!is_forked)
            {
                if (architecture != null)
                {
                    architecture.Dispose();
                    architecture = null;
                }

                if (mono_language != null)
                {
                    mono_language.Dispose();
                    mono_language = null;
                }

                if (native_language != null)
                {
                    native_language.Dispose();
                    native_language = null;
                }

                if (os != null)
                {
                    os.Dispose();
                    os = null;
                }

                if (symtab_manager != null)
                {
                    symtab_manager.Dispose();
                    symtab_manager = null;
                }
            }

            if (breakpoint_manager != null)
            {
                breakpoint_manager.Dispose();
                breakpoint_manager = null;
            }

            if (thread_db != null)
            {
                thread_db.Dispose();
                thread_db = null;
            }

            if (thread_lock_mutex != null)
            {
                thread_lock_mutex.Dispose();
                thread_lock_mutex = null;
            }

            exception_handlers = null;

            manager.RemoveProcess(this);
        }
Example #2
0
        internal void InitializeThreads(Inferior inferior, bool resume_threads)
        {
            if (thread_db != null)
            {
                return;
            }

            thread_db = ThreadDB.Create(this, inferior);
            if (thread_db == null)
            {
                if (!IsManaged)
                {
                    return;
                }

                Report.Error("Failed to initialize thread_db on {0}", start.CommandLine);
                throw new TargetException(TargetError.CannotStartTarget,
                                          "Failed to initialize thread_db on {0}", start.CommandLine);
            }

            int[] threads = inferior.GetThreads();
            foreach (int thread in threads)
            {
                if (thread_hash.Contains(thread))
                {
                    continue;
                }
                ThreadCreated(inferior, thread, Inferior.HasThreadEvents, resume_threads);
            }

            thread_db.GetThreadInfo(inferior, delegate(int lwp, long tid) {
                SingleSteppingEngine engine = (SingleSteppingEngine)thread_hash [lwp];
                if (engine == null)
                {
                    Report.Error("Unknown thread {0} in {1}", lwp, start.CommandLine);
                    return;
                }
                engine.SetTID(tid);
            });
        }