void inicializarVariablesGlobales() { reiniciar(true); VIDAS = configPersonajeVidas(); if (planDeNiveles != NULL) queue_destroy_and_destroy_elements(planDeNiveles, (void*)destruirObjetivosxNivel); planDeNiveles = configPersonajePlanDeNiveles(); list_clean_and_destroy_elements(listaHilosxNivel, (void*)destruirEstructuraHiloPersonaje); }
/** * @NAME: finalizarPersonaje * @DESC: Finaliza todas las variables y estructuras que fueron creadas para el proceso personaje */ void finalizarPersonaje() { log_info(LOGGER, "FINALIZANDO PROCESO PERSONAJE\n"); reiniciar(false); // TODO Bajar Hilos finalizarHilosPersonaje(); pthread_mutex_destroy(&mutexEnvioMensaje); pthread_mutex_destroy(&mutexVidas); pthread_mutex_destroy(&mutexListaHilosxNivel); pthread_mutex_destroy(&mutexReinicio); list_destroy_and_destroy_elements(listaHilosxNivel, (void*)destruirEstructuraHiloPersonaje); queue_destroy_and_destroy_elements(planDeNiveles, (void*)destruirObjetivosxNivel); destruirConfigPersonaje(); log_destroy(LOGGER); }
void liberarNodo(t_nodo *unNodo) { queue_destroy_and_destroy_elements(unNodo->bloquesLiberados, (void*) free); free(unNodo); }
int main(){ system("clear"); tiempoEjec=time(NULL); listaEjecutando = list_create(); listaCpuLibres = list_create(); listaInicializando = list_create(); listaAfinalizar = list_create(); listaPorcentajeCpus = list_create(); listaCpus = list_create(); colaListos = queue_create(); colaIO = queue_create(); sem_init(&hayProgramas,0,0); sem_init(&hayCPU,0,0); sem_init(&hayIO,0,0); pthread_mutex_init(&mutexProcesoListo,NULL); pthread_mutex_init(&mutexInicializando,NULL); pthread_mutex_init(&mutexListaCpusLibres,NULL); pthread_mutex_init(&mutexIO,NULL); pthread_mutex_init(&mutexListaEjecutando,NULL); pthread_mutex_init(&mutexSwitchProc,NULL); pthread_mutex_init(&mutexFinalizarPid,NULL); pthread_mutex_init(&mutexListasCpu,NULL); pthread_mutex_init(&mutexListasPorcentajes,NULL); //creacion de la instancia de log logPlanificador = log_create("../src/log.txt", "planificador.c", false, LOG_LEVEL_INFO); //leemos el archivo de configuracion configPlanificador = leerConfiguracion(); //Inicia el socket para escuchar int serverSocket; server_init(&serverSocket, configPlanificador->puertoEscucha); printf("Planificador listo...\n"); tParametroSelector sel; sel.socket = serverSocket; sel.listaCpus = listaCpuLibres; pthread_t enviarAlCpu,selectorCpu,consumidorIO; pthread_attr_t attr; pthread_attr_init(&attr); /*creacion de hilos*/ pthread_create(&selectorCpu,&attr,selector,(void*)&sel); pthread_create(&enviarAlCpu,&attr,enviar,NULL); pthread_create(&consumidorIO,&attr,consumidor,NULL); int enviar = 1; int cantProc = 1; int lng = 0; char * message = 0; while(enviar){ /*reemplaza a fgets*/ while(1){ int c ; if ((c = getchar()) == EOF) break; message = realloc(message,lng + 1); message[lng] = c; lng++; if (c == '\n') break; } message = realloc(message,lng + 1); message[lng] = '\0'; if (!strcmp(message,"exit\n")) { enviar = 0; llegoexit = true; sem_post(&hayCPU); sem_post(&hayProgramas); sem_post(&hayIO); } else procesarComando(clasificarComando(message),message,&cantProc); /*reinicio*/ free(message); message = 0; lng = 0; } /*espero la terminacion de enviar*/ pthread_join(enviarAlCpu,NULL); pthread_join(consumidorIO,NULL); sem_destroy(&hayCPU); sem_destroy(&hayIO); sem_destroy(&hayProgramas); pthread_mutex_destroy(&mutexIO); pthread_mutex_destroy(&mutexInicializando); pthread_mutex_destroy(&mutexListaCpusLibres); pthread_mutex_destroy(&mutexListaEjecutando); pthread_mutex_destroy(&mutexProcesoListo); pthread_mutex_destroy(&mutexSwitchProc); pthread_mutex_destroy(&mutexFinalizarPid); pthread_mutex_destroy(&mutexListasCpu); pthread_mutex_destroy(&mutexListasPorcentajes); /*destruyo la lista y sus elementos*/ list_destroy_and_destroy_elements(listaCpuLibres,free); list_destroy_and_destroy_elements(listaEjecutando,free); list_destroy_and_destroy_elements(listaInicializando,free); list_destroy_and_destroy_elements(listaAfinalizar,free); list_destroy_and_destroy_elements(listaCpus,free); list_destroy_and_destroy_elements(listaPorcentajeCpus,free); /*destruyo la cola y sus elementos*/ queue_destroy_and_destroy_elements(colaListos,free); close(serverSocket); logTpoTotal(); return 0; }