void dibujar() { if (desactivarGUI) { return; } log_trace(logFile, "Dibujando..."); pthread_mutex_lock(mutexDibujables); t_list* tempI; tempI = list_create(); list_add_all(tempI, listaRecursos); list_add_all(tempI, listaPersonajes); list_add_all(tempI, listaEnemigos); if (nivel_gui_dibujar(tempI, configObj->nombre) == -1) { log_info(logFile, "No se puedo dibujar"); // EXIT_FAILURE; } else { log_trace(logFile, "Dibujado..."); } pthread_mutex_unlock(mutexDibujables); }
void crearHilosConexionRedLocal(nodosRedLocal* worker){ parametrosReduccionLocal* parametrosConexion = malloc(sizeof(parametrosReduccionLocal)); parametrosConexion->ip.cadena = strdup(worker->ip.cadena); parametrosConexion->ip.longitud = worker->ip.longitud; parametrosConexion->numero = worker->numeroNodo; parametrosConexion->puerto = worker->puerto; parametrosConexion->rutaDestino.longitud = worker->archivoTemporal.longitud; parametrosConexion->rutaDestino.cadena = strdup(worker->archivoTemporal.cadena); parametrosConexion->archivosTemporales = list_create(); list_add_all(parametrosConexion->archivosTemporales,worker->archivos); setearTiempo(RED_LOCAL,worker->numeroNodo); pthread_t nuevoHilo; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (pthread_create(&nuevoHilo, &attr, (void*)conectarseConWorkersRedLocal, parametrosConexion) != 0) { log_error(loggerMaster, "No se pudo crear el thread de conexion"); exit(-1); } }
void* conectarseConWorkerRedGlobal(void* params){ parametrosReduccionGlobal* parametrosConexion= malloc(sizeof(parametrosReduccionGlobal)); respuestaReduccionGlobal* infoRedGlobal =(respuestaReduccionGlobal*) params; respuesta confirmacionWorker; int socketWorker = crearSocket(); struct sockaddr_in direccion = cargarDireccion(infoRedGlobal->ip.cadena,infoRedGlobal->puerto); if(!conectarCon(direccion, socketWorker, 2)){//2 id master mandarFalloEnReduccion(); return 0; } log_trace(loggerMaster, "Inicio Red. Global con Worker %d para Job %d", infoRedGlobal->numero, infoRedGlobal->job); struct stat fileStat; if(stat(miJob->rutaReductor.cadena,&fileStat) < 0){ printf("No se pudo abrir el archivo\n"); return 0; } int fd = open(miJob->rutaReductor.cadena,O_RDWR); int size = fileStat.st_size; parametrosConexion->contenidoScript.cadena = mmap(NULL,size,PROT_READ,MAP_SHARED,fd,0); parametrosConexion->contenidoScript.longitud = size; parametrosConexion->archivoTemporal.cadena = strdup(infoRedGlobal->archivoTemporal.cadena); parametrosConexion->archivoTemporal.longitud = infoRedGlobal->archivoTemporal.longitud; parametrosConexion->infoWorkers = list_create(); list_add_all(parametrosConexion->infoWorkers,infoRedGlobal->parametros->infoWorkers); empaquetar(socketWorker, mensajeProcesarRedGlobal, 0, parametrosConexion); confirmacionWorker = desempaquetar(socketWorker); if (munmap(parametrosConexion->contenidoScript.cadena, parametrosConexion->contenidoScript.longitud) == -1){ perror("Error un-mmapping the file"); exit(EXIT_FAILURE); } close(fd); switch(confirmacionWorker.idMensaje){ case mensajeOk: case mensajeRedGlobalCompleta: log_trace(loggerMaster, "Informo YAMA fin de Reduccion Global en nodo %i",infoRedGlobal->numero); empaquetar(socketYama, mensajeRedGlobalCompleta, 0 , 0); estadisticas->cantTareas[RED_GLOBAL]++; finalizarTiempo(estadisticas->tiempoFinRedGlobal,infoRedGlobal->numero); break; case mensajeDesconexion: case mensajeFalloRedGlobal: log_trace(loggerMaster, "Informo a YAMA fallo en Reduccion Global del nodo %d.",infoRedGlobal->numero); estadisticas->cantFallos++; mandarFalloEnReduccion(); break; } return 0; }
t_list* copyList(t_list* original, pthread_mutex_t* mutex) { t_list* copiedList = list_create(); pthread_mutex_lock(mutex); list_add_all(copiedList, original); pthread_mutex_unlock(mutex); return copiedList; }