bool destruirPrograma( Programa * programa ) { bool matchearPrograma(Programa *nodoPrograma) { return nodoPrograma->pid == programa->pid; } list_remove_by_condition( programas, matchearPrograma); if( programa != NULL) { log_info( logger, "Destruyendo programa con pid: %d", programa->pid); borrarSegmento( programa->stack ); borrarSegmento( programa->script ); if(programa->etiquetas != NULL) borrarSegmento( programa->etiquetas ); borrarSegmento( programa->instrucciones ); free( programa ); return true; }else{ log_error( logger, "El programa con pid: %d no se ha podido destruir", programa->pid); return false; } }
void operacionesConSegmentos() { char operacion; printf("¿Que operacion desea realizar?\n"); printf("a - Solicitar una posicion de memoria\n"); printf("b - Escribir una posicion de memoria\n"); printf("c - Crear un Segmento\n"); printf("d - Destruir un Segmento\n"); operacion = getchar(); while (getchar() != '\n') ; switch (operacion) { case 'a': requisitosOperacionSegmento(operacion); break; case 'b': requisitosOperacionSegmento(operacion); break; case 'c': printf("Ingrese el tamanio del segmento a crear\n"); uint32_t tamanio; scanf("%d", &tamanio); while (getchar() != '\n') ; if(tamanio > memoriaLibre()){ printf("El tamaño solicitado excede el espacio libre en memoria"); }else{ crearSegmento(tamanio); } break; case 'd': printSegmentos( tabla_segmentos, PorCONSOLA); printf("Ingrese el ID del segmento a destruir"); uint32_t idSeg; scanf("%d", &idSeg); while (getchar() != '\n'); pthread_rwlock_wrlock(&lockEscrituraLectura); Segmento * segmento = buscarSegmentoEnTabla( idSeg); borrarSegmento( segmento); pthread_rwlock_unlock(&lockEscrituraLectura); break; default: printf("El comando ingresado es invalido\n"); } }