Don't free struct addrinfo too early. Spotted by Christian Cier-Zniewski.
[oweals/tinc.git] / src / mingw / device.c
index 042407a22ff24fea92f97b1457a839649da0fcd6..2813a8839cac9a9e45f01282cc4b1629596add27 100644 (file)
@@ -1,7 +1,7 @@
 /*
     device.c -- Interaction with Windows tap driver in a MinGW environment
     Copyright (C) 2002-2005 Ivo Timmermans,
-                  2002-2006 Guus Sliepen <guus@tinc-vpn.org>
+                  2002-2007 Guus Sliepen <guus@tinc-vpn.org>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -76,18 +76,20 @@ DWORD WINAPI tapreader(void *bla) {
 
        sock = socket(ai->ai_family, SOCK_STREAM, IPPROTO_TCP);
 
-       freeaddrinfo(ai);
-
        if(sock < 0) {
                logger(LOG_ERR, _("System call `%s' failed: %s"), "socket", strerror(errno));
+               freeaddrinfo(ai);
                return -1;
        }
 
        if(connect(sock, ai->ai_addr, ai->ai_addrlen)) {
                logger(LOG_ERR, _("System call `%s' failed: %s"), "connect", strerror(errno));
+               freeaddrinfo(ai);
                return -1;
        }
 
+       freeaddrinfo(ai);
+
        logger(LOG_DEBUG, _("Tap reader running"));
 
        /* Read from tap device and send to parent */