void htxd_cleanup_system_shm(void) { int shm_id; void *shm_address; shm_id = htxd_get_exer_table_shm_id(); shm_address = (void *) htxd_get_exer_table(); htxd_cleanup_shm(shm_id, shm_address); shm_id = htxd_get_system_header_info_shm_id(); shm_address = (void *) htxd_get_system_header_info(); htxd_cleanup_shm(shm_id, shm_address); htxd_delete_ecg_manager(); }
void htxd_cleanup_system_shm(void) { int shm_id; void *shm_address; shm_id = htxd_get_exer_table_shm_id(); shm_address = (void *) htxd_get_exer_table(); htxd_cleanup_shm(shm_id, shm_address); shm_id = htxd_get_system_header_info_shm_id(); shm_address = (void *) htxd_get_system_header_info(); htxd_cleanup_shm(shm_id, shm_address); htxd_delete_ecg_manager(); htxd_set_daemon_state(HTXD_DAEMON_UNVALIDATED); }
/* load exerciser : start exerciser process */ int htxd_load_exerciser(struct htxshm_HE *p_HE) { int exerciser_pid; int temp_int; char exerciser_path[512]; char exerciser_name[64]; char device_name[64]; char run_mode[64]; char rule_path[64]; int emc_mode; char trace_str[256]; HTXD_FUNCTION_TRACE(FUN_ENTRY, "htxd_load_exerciser"); sprintf(trace_str, "loading exerciser <%s>", p_HE->sdev_id); HTXD_TRACE(LOG_OFF, trace_str); exerciser_pid = htxd_create_child_process(); switch(exerciser_pid) { case 0: setsid(); temp_int = p_HE->priority; nice(temp_int); sleep(5); /* let daemon update shared memory */ strcpy(exerciser_name, p_HE->HE_name); if (strcmp(p_HE->HE_name, "hxemem64") == 0) { putenv("CORE_NOSHM=true"); } if (strcmp(p_HE->HE_name, "hxepowermixer") == 0) { putenv("MEMORY_AFFINITY=MCM"); } strcpy(exerciser_path, global_htx_home_dir); strcat(exerciser_path, "/bin/"); strcat(exerciser_path, exerciser_name); strcpy(device_name, "/dev/"); strcat(device_name, p_HE->sdev_id); emc_mode = htxd_get_emc_mode(); if(emc_mode == 1) { strcpy(run_mode, "EMC"); } else { strcpy(run_mode, "REG"); } if(emc_mode == 1) { if(p_HE->emc_rules[0] != '/') { sprintf(rule_path, "%s/rules/emc/%s", global_htx_home_dir, p_HE->emc_rules); } else { strcpy(rule_path, p_HE->emc_rules); } } else { if(p_HE->reg_rules[0] != '/') { sprintf(rule_path, "%s/rules/reg/%s", global_htx_home_dir, p_HE->reg_rules); } else { strcpy(rule_path, p_HE->reg_rules); } } /* system("export EXTSHM=OFF"); */ unsetenv("EXTSHM"); if ( (execl(exerciser_path, exerciser_name, device_name, run_mode, rule_path, (char *) 0) ) == -1) { sprintf(trace_str, "execl() failed exerciser_path <%s> exerciser_name <%s> errno = <%d>\n", exerciser_path, exerciser_name, errno); htxd_send_message (trace_str, 0, HTX_SYS_SOFT_ERROR, HTX_SYS_MSG); HTXD_TRACE(LOG_ON, trace_str); exit(-1); } case -1: sprintf(trace_str, "exerciser <%s> fork failed with error <%d>", p_HE->sdev_id, errno); HTXD_TRACE(LOG_ON, trace_str); return -1; default: p_HE->PID = exerciser_pid; htxd_update_exer_pid_in_exer_list(htxd_get_exer_table(), p_HE->sdev_id, exerciser_pid); sprintf(trace_str, "exerciser <%s> forked with PID <%d>", p_HE->sdev_id, p_HE->PID); HTXD_TRACE(LOG_OFF, trace_str); break; } htxd_reset_FD_close_on_exec_flag(); HTXD_FUNCTION_TRACE(FUN_EXIT, "htxd_load_exerciser"); return 0; }