void ao_shutdown(void) { driver_list *driver = driver_head; driver_list *next_driver; if (!driver_head) return; /* unload and free all the drivers */ while (driver) { if (driver->handle) { #ifndef STRIP_PLUGINS dlclose(driver->handle); #endif free(driver->functions); /* DON'T FREE STATIC FUNC TABLES */ } next_driver = driver->next; free(driver); driver = next_driver; } free(info_table); _clear_config(); /* NULL out driver_head or ao_initialize() won't work */ driver_head = NULL; }
/* * fini() is called when the plugin is unloaded. Free all memory. */ extern int fini(void) { pthread_mutex_lock(&bb_mutex); if (debug_flag) info("%s: %s", __func__, plugin_type); _clear_config(); _clear_cache(); pthread_mutex_unlock(&bb_mutex); return SLURM_SUCCESS; }
/* Load and process BurstBufferParameters configuration parameter */ static void _load_config(void) { s_p_hashtbl_t *bb_hashtbl = NULL; char *bb_conf, *tmp = NULL, *value; static s_p_options_t bb_options[] = { {"AllowUsers", S_P_STRING}, {"DenyUsers", S_P_STRING}, {"GetSysState", S_P_STRING}, {"JobSizeLimit", S_P_STRING}, {"StagedInPrioBoost", S_P_UINT32}, {"StartStageIn", S_P_STRING}, {"StartStageOut", S_P_STRING}, {"StopStageIn", S_P_STRING}, {"StopStageOut", S_P_STRING}, {"UserSizeLimit", S_P_STRING}, {NULL} }; _clear_config(); if (slurm_get_debug_flags() & DEBUG_FLAG_BURST_BUF) debug_flag = true; bb_conf = get_extra_conf_path("burst_buffer.conf"); bb_hashtbl = s_p_hashtbl_create(bb_options); if (s_p_parse_file(bb_hashtbl, NULL, bb_conf, false) == SLURM_ERROR) fatal("something wrong with opening/reading %s: %m", bb_conf); if (s_p_get_string(&allow_users_str, "AllowUsers", bb_hashtbl)) allow_users = _parse_users(allow_users_str); if (s_p_get_string(&deny_users_str, "DenyUsers", bb_hashtbl)) deny_users = _parse_users(deny_users_str); s_p_get_string(&get_sys_state, "GetSysState", bb_hashtbl); if (s_p_get_string(&tmp, "JobSizeLimit", bb_hashtbl)) { job_size_limit = _get_size_num(tmp); xfree(tmp); } s_p_get_uint32(&prio_boost, "StagedInPrioBoost", bb_hashtbl); s_p_get_string(&start_stage_in, "StartStageIn", bb_hashtbl); s_p_get_string(&start_stage_out, "StartStageOut", bb_hashtbl); s_p_get_string(&stop_stage_in, "StopStageIn", bb_hashtbl); s_p_get_string(&stop_stage_out, "StopStageOut", bb_hashtbl); if (s_p_get_string(&tmp, "UserSizeLimit", bb_hashtbl)) { user_size_limit = _get_size_num(tmp); xfree(tmp); } s_p_hashtbl_destroy(bb_hashtbl); xfree(bb_conf); if (debug_flag) { value = _print_users(allow_users); info("%s: AllowUsers:%s", __func__, value); xfree(value); value = _print_users(deny_users); info("%s: DenyUsers:%s", __func__, value); xfree(value); info("%s: GetSysState:%s", __func__, get_sys_state); info("%s: JobSizeLimit:%u", __func__, job_size_limit); info("%s: StagedInPrioBoost:%u", __func__, prio_boost); info("%s: StartStageIn:%s", __func__, start_stage_in); info("%s: StartStageOut:%s", __func__, start_stage_out); info("%s: StopStageIn:%s", __func__, stop_stage_in); info("%s: StopStageOut:%s", __func__, stop_stage_out); info("%s: UserSizeLimit:%u", __func__, user_size_limit); } }