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(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;
}

View File

@ -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