Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Jul 2007 23:15:36 GMT
From:      Matus Harvan <mharvan@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 124141 for review
Message-ID:  <200707262315.l6QNFaNk082830@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=124141

Change 124141 by mharvan@mharvan_twoflower on 2007/07/26 23:15:08

	clean up fragment reassembly information on exit
	check gettimeofday(2) return value

Affected files ...

.. //depot/projects/soc2007/mharvan-mtund/mtund.src/tunneld.c#12 edit

Differences ...

==== //depot/projects/soc2007/mharvan-mtund/mtund.src/tunneld.c#12 (text+ko) ====

@@ -21,6 +21,8 @@
 #include <signal.h>
 #include <sys/time.h>
 #include <event.h>
+#include <err.h>
+#include <sysexits.h>
 
 #include "tun_dev.h"
 
@@ -55,6 +57,7 @@
 /* fragment id for the next packet to be fragmented */
 uint frag_id = 0; // TODO: randomize
 
+/* fragmentat reassembly info list */
 LIST_HEAD(frag_info_list_head, frag_info) frag_info_list =
 	LIST_HEAD_INITIALIZER(frag_info_list);
 
@@ -240,6 +243,10 @@
     }
 
     /* fragment reassembly timeout */
+    if (gettimeofday(&tv, NULL) != 0) {
+	errx(EX_OSERR, "gettimeofday() failed");
+	//TODO: maybe fail
+    }
     LIST_FOREACH_SAFE(np, &frag_info_list, frag_infos, np_temp) {
 	if (tv.tv_sec - np->tv_sec > FRAG_TIMEOUT) {
 	    LIST_REMOVE(np, frag_infos);
@@ -331,8 +338,10 @@
 	    memset(p->bitmap, 0, sizeof(*(p->bitmap)));
 	    
 	    /* collect information about the fragments */
-	    // TODO: error checking
-	    (void) gettimeofday(&tv, NULL);
+	    if (gettimeofday(&tv, NULL) != 0) {
+		errx(EX_OSERR, "gettimeofday() failed");
+		//TODO: maybe fail
+	    }
 	    p->id = frag_hdr->id;
 	    p->size = frag_hdr->size;
 	    memcpy(&p->tv_sec, &tv.tv_sec, sizeof(tv.tv_sec));
@@ -512,12 +521,22 @@
 void cleanup()
 {
     plugint *pl;
+    struct frag_info *p;
 
     event_del(&timer_ev);
 
     event_del(&tun_ev);
     tun_close(tun_fd, tun_dev);
 
+    /* deallocate fragment reassembly information */
+    while (!LIST_EMPTY(&frag_info_list)) {
+	p = LIST_FIRST(&frag_info_list);
+	LIST_REMOVE(p, frag_infos);
+	free(p->bitmap);
+	free(p->buf);
+	free(p);
+    }
+
     /* deinitialize all plugins and free memory */
     while(plugins) {
 	pl = plugins;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707262315.l6QNFaNk082830>