fix leaks

This commit is contained in:
elvis
2022-04-25 14:59:30 +02:00
parent d38c4688bb
commit d8a0220ade
2 changed files with 23 additions and 8 deletions

View File

@ -243,8 +243,10 @@ int main(int argc, char *argv[]) {
if (i == listenfd) { // e' una nuova richiesta di connessione if (i == listenfd) { // e' una nuova richiesta di connessione
if(stopNewConnections) { // non vogliamo nuove connessioni if(stopNewConnections) { // non vogliamo nuove connessioni
// scrivo sul log // 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; goto _cleanup;
}
FD_CLR(i, &set); FD_CLR(i, &set);
close(i); close(i);
@ -254,24 +256,28 @@ int main(int argc, char *argv[]) {
// accetto la connessione nuova // accetto la connessione nuova
if ((*connfd = accept(listenfd, (struct sockaddr*)NULL ,NULL)) == -1) { if ((*connfd = accept(listenfd, (struct sockaddr*)NULL ,NULL)) == -1) {
perror("accept"); perror("accept");
free(connfd);
goto _cleanup; goto _cleanup;
} }
// scrivo sul log // 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 ) { if( n<0 ) {
perror("snprintf"); perror("snprintf");
free(connfd);
goto _cleanup; goto _cleanup;
} }
if( taglia_log(taglia, buf) < 0) if( taglia_log(taglia, buf) < 0) {
free(connfd);
goto _cleanup; goto _cleanup;
}
// creo gli argomenti da passare al thread // creo gli argomenti da passare al thread
threadT* args = calloc(1, sizeof(threadT)); threadT* args = calloc(1, sizeof(threadT));
if(!args) { if(!args) {
perror("ERROR FATAL calloc"); perror("ERROR FATAL calloc");
free(connfd);
goto _cleanup; goto _cleanup;
} }
args->connfd = connfd; args->connfd = connfd;
@ -302,6 +308,7 @@ int main(int argc, char *argv[]) {
int pdr; // ottengo il descrittore della pipe int pdr; // ottengo il descrittore della pipe
if (readn(request_pipe[0], &pdr, sizeof(int)) == -1) { if (readn(request_pipe[0], &pdr, sizeof(int)) == -1) {
perror("readn"); perror("readn");
free(connfd);
break; break;
} }
@ -328,6 +335,7 @@ int main(int argc, char *argv[]) {
int code; int code;
if (readn(signal_pipe[0], &code, sizeof(int)) == -1) { if (readn(signal_pipe[0], &code, sizeof(int)) == -1) {
perror("readn"); perror("readn");
free(connfd);
break; break;
} }
switch (code) { switch (code) {
@ -335,9 +343,10 @@ int main(int argc, char *argv[]) {
stopNewConnections = 1; stopNewConnections = 1;
// scrivo sul log // 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; goto _cleanup;
}
if (numberOfConnections == 0) { if (numberOfConnections == 0) {
quit = 1; quit = 1;
// termino il signalThread // termino il signalThread
@ -348,14 +357,17 @@ int main(int argc, char *argv[]) {
case 1: { // stop immediato case 1: { // stop immediato
quit = 1; quit = 1;
// scrivo sul log // scrivo sul log
if( taglia_log(taglia, "Immediate quit\n") < 0) if( taglia_log(taglia, "Immediate quit\n") < 0) {
free(connfd);
goto _cleanup; goto _cleanup;
}
break; break;
} }
default: default:
perror("ERROR codice inviato dal sigThread invalido.\n"); perror("ERROR codice inviato dal sigThread invalido.\n");
break; break;
} }
free(connfd);
break; break;
} }
else { // richiesta di un client già connesso else { // richiesta di un client già connesso
@ -367,6 +379,7 @@ int main(int argc, char *argv[]) {
threadT* args = calloc(1, sizeof(threadT)); threadT* args = calloc(1, sizeof(threadT));
if(!args) { if(!args) {
perror("ERROR FATAL calloc"); perror("ERROR FATAL calloc");
free(connfd);
goto _cleanup; goto _cleanup;
} }
*connfd = i; *connfd = i;
@ -417,12 +430,14 @@ int main(int argc, char *argv[]) {
unlink(socketName); unlink(socketName);
free(socketName);
printf("File Storage Server terminato.\n"); printf("File Storage Server terminato.\n");
fflush(stdout); fflush(stdout);
return 0; return 0;
_cleanup: _cleanup:
unlink(socketName); unlink(socketName);
free(socketName);
return -1; return -1;
} }

View File

@ -13,7 +13,7 @@
typedef struct struct_thread { typedef struct struct_thread {
volatile int *quit; volatile int *quit;
int request_pipe; int request_pipe;
int *connfd; long *connfd;
queueT *q; // puntatore alla queue dei file queueT *q; // puntatore alla queue dei file
taglia_t *taglia; // puntatore alla struct del file di log taglia_t *taglia; // puntatore alla struct del file di log
threadpool_t *pool; // puntatore alla threadpool threadpool_t *pool; // puntatore alla threadpool