about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--makefile5
-rw-r--r--src/handlers.c6
-rw-r--r--src/main.c12
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);
 		}
 	}