diff options
-rw-r--r-- | makefile | 5 | ||||
-rw-r--r-- | src/handlers.c | 6 | ||||
-rw-r--r-- | src/main.c | 12 |
3 files changed, 13 insertions, 10 deletions
diff --git a/makefile b/makefile index c7d9caf..a4cec5a 100644 --- a/makefile +++ b/makefile @@ -1,6 +1,11 @@ CC:=clang +ifeq ($(DEBUG),1) +CFLAGS:=-march=native -fsanitize=address -funroll-loops -Wall -Wextra -Werror -O1 +LDFLAGS:=-lpthread +else CFLAGS:=-march=native -O3 -funroll-loops -Wall -Wextra -Werror LDFLAGS:=-flto=thin -lpthread +endif ifeq ($(shell uname),SunOS) CC = gcc diff --git a/src/handlers.c b/src/handlers.c index 1d4d92c..d42382e 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -442,6 +442,7 @@ void *write_req_resp(void *args) { if (rcv >= 4) { nbd_tftp_packet_data data = nbd_tftp_de_data(rxb, rcv); if (data.opcode == 5) { + free(data.data); goto cleanup; } syslog( @@ -465,22 +466,27 @@ void *write_req_resp(void *args) { ); argptr->err = 5; senderror(s, argptr); + free(data.data); goto cleanup; } if (fwrite(data.data, 1, data.datalen, fp) < data.datalen) { syslog(LOG_ERR, "filewrite failed for %s: %s", fname, strerror(errno)); argptr->err = 0; senderror(s, argptr); + free(data.data); goto clean_socket; } } + free(data.data); break; } if (data.block_num == (bnum - 1)) { rxon = 0; vcount++; + free(data.data); break; } + free(data.data); } if (++rxcount > 30) { syslog(LOG_ERR, "retry count exceeded"); diff --git a/src/main.c b/src/main.c index fc5835b..7114cc7 100644 --- a/src/main.c +++ b/src/main.c @@ -279,12 +279,7 @@ int main(int argc, char **argv) { } } //TODO: use std threads - pthread_t *_thread = malloc(sizeof(pthread_t)); - if (_thread == NULL) { - syslog(LOG_CRIT, "unable to allocate memory: %s", strerror(errno)); - free(args); - continue; - } + pthread_t _thread; void *(*func)(void *); switch (oc) { case RRQ: @@ -300,15 +295,12 @@ int main(int argc, char **argv) { //TODO: use std threads int e; syslog(LOG_ERR, "spawning thread for %s", inet_ntoa(caddr.sin_addr)); -// void *lol = func((void *)args); -// free(lol); - if ((e = pthread_create(_thread, 0, func, (void *)args)) != 0) { + if ((e = pthread_create(&_thread, 0, func, (void *)args)) != 0) { syslog( LOG_CRIT, "unable to spawn thread: %s", strerror(e) ); - free(_thread); free(args); } } |