diff --git a/src/server.c b/src/server.c index dbae2cc..05c8a92 100644 --- a/src/server.c +++ b/src/server.c @@ -243,8 +243,10 @@ int main(int argc, char *argv[]) { if (i == listenfd) { // e' una nuova richiesta di connessione if(stopNewConnections) { // non vogliamo nuove connessioni // scrivo sul log - if( taglia_log(taglia, "Nuova connessione rifiutata, server in terminazione\n") < 0) + if( taglia_log(taglia, "Nuova connessione rifiutata, server in terminazione\n") < 0) { + free(connfd); goto _cleanup; + } FD_CLR(i, &set); close(i); @@ -254,24 +256,28 @@ int main(int argc, char *argv[]) { // accetto la connessione nuova if ((*connfd = accept(listenfd, (struct sockaddr*)NULL ,NULL)) == -1) { perror("accept"); + free(connfd); goto _cleanup; } // scrivo sul log - n = snprintf(buf, sizeof(buf), "New client: %d\n", *connfd); + n = snprintf(buf, sizeof(buf), "New client: %ld\n", *connfd); if( n<0 ) { perror("snprintf"); + free(connfd); goto _cleanup; } - if( taglia_log(taglia, buf) < 0) + if( taglia_log(taglia, buf) < 0) { + free(connfd); goto _cleanup; - + } // creo gli argomenti da passare al thread threadT* args = calloc(1, sizeof(threadT)); if(!args) { perror("ERROR FATAL calloc"); + free(connfd); goto _cleanup; } args->connfd = connfd; @@ -302,6 +308,7 @@ int main(int argc, char *argv[]) { int pdr; // ottengo il descrittore della pipe if (readn(request_pipe[0], &pdr, sizeof(int)) == -1) { perror("readn"); + free(connfd); break; } @@ -328,6 +335,7 @@ int main(int argc, char *argv[]) { int code; if (readn(signal_pipe[0], &code, sizeof(int)) == -1) { perror("readn"); + free(connfd); break; } switch (code) { @@ -335,9 +343,10 @@ int main(int argc, char *argv[]) { stopNewConnections = 1; // scrivo sul log - if( taglia_log(taglia, "Stop new connections\n") < 0) + if( taglia_log(taglia, "Stop new connections\n") < 0){ + free(connfd); goto _cleanup; - + } if (numberOfConnections == 0) { quit = 1; // termino il signalThread @@ -348,14 +357,17 @@ int main(int argc, char *argv[]) { case 1: { // stop immediato quit = 1; // scrivo sul log - if( taglia_log(taglia, "Immediate quit\n") < 0) + if( taglia_log(taglia, "Immediate quit\n") < 0) { + free(connfd); goto _cleanup; + } break; } default: perror("ERROR codice inviato dal sigThread invalido.\n"); break; } + free(connfd); break; } else { // richiesta di un client giĆ  connesso @@ -367,6 +379,7 @@ int main(int argc, char *argv[]) { threadT* args = calloc(1, sizeof(threadT)); if(!args) { perror("ERROR FATAL calloc"); + free(connfd); goto _cleanup; } *connfd = i; @@ -417,12 +430,14 @@ int main(int argc, char *argv[]) { unlink(socketName); + free(socketName); printf("File Storage Server terminato.\n"); fflush(stdout); return 0; _cleanup: unlink(socketName); + free(socketName); return -1; } diff --git a/src/serverWorker.h b/src/serverWorker.h index 857aa8f..bd2c42e 100644 --- a/src/serverWorker.h +++ b/src/serverWorker.h @@ -13,7 +13,7 @@ typedef struct struct_thread { volatile int *quit; int request_pipe; - int *connfd; + long *connfd; queueT *q; // puntatore alla queue dei file taglia_t *taglia; // puntatore alla struct del file di log threadpool_t *pool; // puntatore alla threadpool