Make device close cleaner.
authorEtienne Dechamps <etienne@edechamps.fr>
Sun, 22 Jun 2014 08:53:26 +0000 (09:53 +0100)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 22 Jun 2014 12:01:30 +0000 (14:01 +0200)
src/bsd/device.c
src/cygwin/device.c
src/linux/device.c
src/mingw/device.c
src/multicast_device.c
src/raw_socket_device.c
src/solaris/device.c
src/uml_device.c
src/vde_device.c

index 145b79e..49508bc 100644 (file)
@@ -197,9 +197,11 @@ static void close_device(void) {
                default:
                        close(device_fd);
        }
+       device_fd = -1;
 
-       free(device);
-       free(iface);
+       free(device); device = NULL;
+       free(iface); iface = NULL;
+       device_info = NULL;
 }
 
 static bool read_packet(vpn_packet_t *packet) {
index a110f7f..d522b4f 100644 (file)
@@ -215,12 +215,13 @@ static bool setup_device(void) {
 static void close_device(void) {
        close(sp[0]);
        close(sp[1]);
-       CloseHandle(device_handle);
+       CloseHandle(device_handle); device_handle = INVALID_HANDLE_VALUE;
 
        kill(reader_pid, SIGKILL);
 
-       free(device);
-       free(iface);
+       free(device); device = NULL;
+       free(iface); iface = NULL;
+       device_info = NULL;
 }
 
 static bool read_packet(vpn_packet_t *packet) {
index 6ed1622..cfd99ff 100644 (file)
@@ -110,10 +110,12 @@ static bool setup_device(void) {
 
 static void close_device(void) {
        close(device_fd);
+       device_fd = -1;
 
-       free(type);
-       free(device);
-       free(iface);
+       free(type); type = NULL;
+       free(device); device = NULL;
+       free(iface); iface = NULL;
+       device_info = NULL;
 }
 
 static bool read_packet(vpn_packet_t *packet) {
index 0642725..85c0c7b 100644 (file)
@@ -213,10 +213,11 @@ static bool setup_device(void) {
 }
 
 static void close_device(void) {
-       CloseHandle(device_handle);
+       CloseHandle(device_handle); device_handle = INVALID_HANDLE_VALUE;
 
-       free(device);
-       free(iface);
+       free(device); device = NULL;
+       free(iface); iface = NULL;
+       device_info = NULL;
 }
 
 static bool read_packet(vpn_packet_t *packet) {
index 48e1200..ba272eb 100644 (file)
@@ -148,13 +148,15 @@ error:
 }
 
 static void close_device(void) {
-       close(device_fd);
+       close(device_fd); device_fd = -1;
 
-       free(device);
-       free(iface);
+       free(device); device = NULL;
+       free(iface); iface = NULL;
 
-       if(ai)
-               freeaddrinfo(ai);
+       if(ai) {
+               freeaddrinfo(ai); ai = NULL;
+       }
+       device_info = NULL;
 }
 
 static bool read_packet(vpn_packet_t *packet) {
index 57df5b7..a8c2c86 100644 (file)
@@ -83,10 +83,11 @@ static bool setup_device(void) {
 }
 
 static void close_device(void) {
-       close(device_fd);
+       close(device_fd); device_fd = -1;
 
-       free(device);
-       free(iface);
+       free(device); device = NULL;
+       free(iface); iface = NULL;
+       device_info = NULL;
 }
 
 static bool read_packet(vpn_packet_t *packet) {
index c11f60f..a4c0d27 100644 (file)
@@ -287,11 +287,11 @@ static void close_device(void) {
                }
        }
 
-       close(ip_fd);
-       close(device_fd);
+       close(ip_fd); ip_fd = -1;
+       close(device_fd); device_fd = -1;
 
-       free(device);
-       free(iface);
+       free(device); device = NULL;
+       free(iface); iface = NULL;
 }
 
 static bool read_packet(vpn_packet_t *packet) {
index 5193fe9..f2b52cb 100644 (file)
@@ -156,22 +156,29 @@ static bool setup_device(void) {
 }
 
 void close_device(void) {
-       if(listen_fd >= 0)
-               close(listen_fd);
+       if(listen_fd >= 0) {
+               close(listen_fd); listen_fd = -1;
+       }
 
-       if(request_fd >= 0)
-               close(request_fd);
+       if(request_fd >= 0) {
+               close(request_fd); request_fd = -1;
+       }
 
-       if(data_fd >= 0)
-               close(data_fd);
+       if(data_fd >= 0) {
+               close(data_fd); data_fd = -1;
+       }
 
-       if(write_fd >= 0)
-               close(write_fd);
+       if(write_fd >= 0) {
+               close(write_fd); write_fd = -1;
+       }
 
        unlink(device);
 
-       free(device);
-       if(iface) free(iface);
+       free(device); device = NULL;
+       if(iface) {
+               free(iface); iface = NULL;
+       }
+       device_info = NULL;
 }
 
 static bool read_packet(vpn_packet_t *packet) {
index 1021f5d..55d66b4 100644 (file)
@@ -82,15 +82,18 @@ static bool setup_device(void) {
 }
 
 static void close_device(void) {
-       if(conn)
-               plug.vde_close(conn);
+       if(conn) {
+               plug.vde_close(conn); conn = NULL;
+       }
 
        if(plug.dl_handle)
                libvdeplug_dynclose(plug);
 
-       free(device);
+       free(device); device = NULL;
+
+       free(iface); iface = NULL;
 
-       free(iface);
+       device_info = NULL;
 }
 
 static bool read_packet(vpn_packet_t *packet) {