void kmdb_dpi_process_work_queue(void) { work_results_t res; (void) mdb_nv_create(&res.res_loads, UM_SLEEP); (void) mdb_nv_create(&res.res_unloads, UM_SLEEP); mdb_dprintf(MDB_DBG_DPI, "processing work queue\n"); (void) kmdb_wr_debugger_process(kmdb_dbgnotify_cb, &res); if (mdb_nv_size(&res.res_loads)) { mdb_printf("Loaded modules: ["); print_modules(&res.res_loads); mdb_printf(" ]\n"); } if (mdb_nv_size(&res.res_unloads)) { mdb_printf("Unloaded modules: ["); print_modules(&res.res_unloads); mdb_printf(" ]\n"); } mdb_nv_destroy(&res.res_loads); mdb_nv_destroy(&res.res_unloads); }
void mdb_destroy(void) { const mdb_dcmd_t *dcp; mdb_var_t *v; int unload_mode = MDB_MOD_SILENT; #ifdef _KMDB unload_mode |= MDB_MOD_DEFER; #endif mdb_intr_disable(); mdb_macalias_destroy(); /* * Some targets use modules during ->t_destroy, so do it first. */ if (mdb.m_target != NULL) (void) mdb_tgt_destroy(mdb.m_target); /* * Unload modules _before_ destroying the disassemblers since a * module that installs a disassembler should try to clean up after * itself. */ mdb_module_unload_all(unload_mode); mdb_nv_rewind(&mdb.m_disasms); while ((v = mdb_nv_advance(&mdb.m_disasms)) != NULL) mdb_dis_destroy(mdb_nv_get_cookie(v)); mdb_callb_remove_all(); if (mdb.m_defdisasm != NULL) strfree(mdb.m_defdisasm); if (mdb.m_prsym != NULL) mdb_gelf_symtab_destroy(mdb.m_prsym); for (dcp = &mdb_dcmd_builtins[0]; dcp->dc_name != NULL; dcp++) (void) mdb_module_remove_dcmd(&mdb.m_rmod, dcp->dc_name); mdb_nv_destroy(&mdb.m_nv); mdb_nv_destroy(&mdb.m_walkers); mdb_nv_destroy(&mdb.m_dcmds); mdb_nv_destroy(&mdb.m_modules); mdb_nv_destroy(&mdb.m_disasms); mdb_free(mdb.m_ipathstr, MAXPATHLEN); mdb_free(mdb.m_lpathstr, MAXPATHLEN); if (mdb.m_ipath != NULL) mdb_path_free(mdb.m_ipath, mdb.m_ipathlen); if (mdb.m_lpath != NULL) mdb_path_free(mdb.m_lpath, mdb.m_lpathlen); if (mdb.m_in != NULL) mdb_iob_destroy(mdb.m_in); mdb_iob_destroy(mdb.m_out); mdb.m_out = NULL; mdb_iob_destroy(mdb.m_err); mdb.m_err = NULL; if (mdb.m_log != NULL) mdb_io_rele(mdb.m_log); mdb_lex_state_destroy(&frame0); }