void list_destroy(List l) { ListIterator i, iTmp; ListNode p, pTmp; assert(l != NULL); list_mutex_lock(&l->mutex); assert(l->magic == LIST_MAGIC); i = l->iNext; while (i) { assert(i->magic == LIST_MAGIC); iTmp = i->iNext; assert(i->magic = 1); /* clear magic via assert abuse */ list_iterator_free(i); i = iTmp; } p = l->head; while (p) { pTmp = p->next; if (p->data && l->fDel) l->fDel(p->data); list_node_free(p); p = pTmp; } assert(l->magic = 1); /* clear magic via assert abuse */ list_mutex_unlock(&l->mutex); list_mutex_destroy(&l->mutex); list_free(l); return; }
void liberar_memoria_plataforma(){ void (*destruir_pj_listo) = destruir_personaje_listo; void (*destruir_pj_finalizado) = destruir_personaje_finalizado; void (*destruir_planificador)= destruir_planificadores; log_debug(logger_orq, "Liberando lista personajes_bloqueados."); list_mutex_clean_and_destroy_elements(personajes_bloqueados, destruir_pj_listo); list_mutex_destroy(personajes_bloqueados); log_debug(logger_orq, "Liberando lista personajes_listos."); list_mutex_clean_and_destroy_elements(personajes_listos, destruir_pj_listo); list_mutex_destroy(personajes_listos); log_debug(logger_orq, "Liberando lista personajes_finalizados."); list_mutex_clean_and_destroy_elements(personajes_finalizados, destruir_pj_finalizado); list_mutex_destroy(personajes_finalizados); log_debug(logger_orq, "Eliminando lista planificadores.w"); list_mutex_clean_and_destroy_elements(planificadores, destruir_planificador); list_mutex_destroy(planificadores); }
int main(void) { int i; int quantum_reset; /* Creo la lista mutex */ list_mutex = list_mutex_create(); /* Creo la cola mutex */ queue_mutex = queue_mutex_create(); /* Creo la cola round robin */ quantum_reset = 3; queue_rr = queue_rr_create(quantum_reset); /* Creo cola array round robin */ for(i = 0 ; i<MAX_THREADS ; i++) { array_queue_rr[i] = queue_rr_create(quantum_reset); } /* prueba_lista_mutex(); */ /* prueba_cola_mutex(); */ /* prueba_cola_round_robin(); */ prueba_array_cola_round_robin(); /* libero memoria */ list_mutex_destroy(list_mutex); queue_mutex_destroy(queue_mutex); queue_rr_destroy(queue_rr); for(i = 0 ; i<MAX_THREADS ; i++) { queue_rr_destroy(array_queue_rr[i]); } return(1); }