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(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;
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user