fix leaks
This commit is contained in:
29
src/server.c
29
src/server.c
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user