Ejemplo n.º 1
0
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();

}
Ejemplo n.º 2
0
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;
}