ctdb-common: Save errno before closing file to keep debug accurate
authorMartin Schwenke <martin@meltin.net>
Mon, 15 Aug 2016 05:22:54 +0000 (15:22 +1000)
committerMartin Schwenke <martins@samba.org>
Wed, 17 Aug 2016 21:00:26 +0000 (23:00 +0200)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12157

In the AIX case, also add the close of the file.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/common/system_aix.c
ctdb/common/system_freebsd.c
ctdb/common/system_gnu.c
ctdb/common/system_kfreebsd.c
ctdb/common/system_linux.c

index 10798a7d42f8f1b08cfdca3edc1c40245373011d..e44d1d6a031e94b90168fabf6fedc185c42fe302 100644 (file)
@@ -118,7 +118,7 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                struct ip ip;
                struct tcphdr tcp;
        } ip4pkt;
-
+       int saved_errno;
 
        /* for now, we only handle AF_INET addresses */
        if (src->ip.sin_family != AF_INET || dest->ip.sin_family != AF_INET) {
@@ -165,9 +165,13 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
        ip4pkt.tcp.th_win   = htons(1234);
        ip4pkt.tcp.th_sum    = tcp_checksum((uint16_t *)&ip4pkt.tcp, sizeof(ip4pkt.tcp), &ip4pkt.ip);
 
-       ret = sendto(s, &ip4pkt, sizeof(ip4pkt), 0, (struct sockaddr *)dest, sizeof(*dest));
+       ret = sendto(s, &ip4pkt, sizeof(ip4pkt), 0,
+                    (struct sockaddr *)dest, sizeof(*dest));
+       saved_errno = errno;
+       close(s);
        if (ret != sizeof(ip4pkt)) {
-               DEBUG(DEBUG_CRIT,(__location__ " failed sendto (%s)\n", strerror(errno)));
+               DEBUG(DEBUG_ERR,
+                     ("Failed sendto (%s)\n", strerror(saved_errno)));
                return -1;
        }
 
index ca1300a74ce63edbe8aabbbdf0590ef6073871c3..e72fbbd28cae84042b44f0f16a5ddac4b3fef376 100644 (file)
@@ -137,6 +137,7 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                struct ip6_hdr ip6;
                struct tcphdr tcp;
        } ip6pkt;
+       int saved_errno;
 
        switch (src->ip.sin_family) {
        case AF_INET:
@@ -183,9 +184,11 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                ret = sendto(s, &ip4pkt, sizeof(ip4pkt), 0,
                             (const struct sockaddr *)&dest->ip,
                             sizeof(dest->ip));
+               saved_errno = errno;
                close(s);
                if (ret != sizeof(ip4pkt)) {
-                       DEBUG(DEBUG_CRIT,(__location__ " failed sendto (%s)\n", strerror(errno)));
+                       DEBUG(DEBUG_ERR,
+                             ("Failed sendto (%s)\n", strerror(saved_errno)));
                        return -1;
                }
                break;
@@ -228,11 +231,13 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                ret = sendto(s, &ip6pkt, sizeof(ip6pkt), 0,
                             (const struct sockaddr *)&dest->ip6,
                             sizeof(dest->ip6));
+               saved_errno = errno;
                tmpdest->ip6.sin6_port = tmpport;
                close(s);
 
                if (ret != sizeof(ip6pkt)) {
-                       DEBUG(DEBUG_CRIT,(__location__ " failed sendto (%s)\n", strerror(errno)));
+                       DEBUG(DEBUG_ERR,
+                             ("Failed sendto (%s)\n", strerror(saved_errno)));
                        return -1;
                }
                break;
index 0eed47e4e05e9d03560d454eb677dbdeb9202a4b..603345d0755bf70baa50df6317cfcb8f2078b753 100644 (file)
@@ -136,6 +136,7 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                struct ip6_hdr ip6;
                struct tcphdr tcp;
        } ip6pkt;
+       int saved_errno;
 
        switch (src->ip.sin_family) {
        case AF_INET:
@@ -178,10 +179,13 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                        return -1;
                }
 
-               ret = sendto(s, &ip4pkt, sizeof(ip4pkt), 0, &dest->ip, sizeof(dest->ip));
+               ret = sendto(s, &ip4pkt, sizeof(ip4pkt), 0,
+                            &dest->ip, sizeof(dest->ip));
+               saved_errno = errno;
                close(s);
                if (ret != sizeof(ip4pkt)) {
-                       DEBUG(DEBUG_CRIT,(__location__ " failed sendto (%s)\n", strerror(errno)));
+                       DEBUG(DEBUG_ERR,
+                             ("Failed sendto (%s)\n", strerror(saved_errno)));
                        return -1;
                }
                break;
@@ -220,12 +224,15 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                tmpport = tmpdest->ip6.sin6_port;
 
                tmpdest->ip6.sin6_port = 0;
-               ret = sendto(s, &ip6pkt, sizeof(ip6pkt), 0, &dest->ip6, sizeof(dest->ip6));
+               ret = sendto(s, &ip6pkt, sizeof(ip6pkt), 0,
+                            &dest->ip6, sizeof(dest->ip6));
+               saved_errno = errno;
                tmpdest->ip6.sin6_port = tmpport;
                close(s);
 
                if (ret != sizeof(ip6pkt)) {
-                       DEBUG(DEBUG_CRIT,(__location__ " failed sendto (%s)\n", strerror(errno)));
+                       DEBUG(DEBUG_ERR,
+                             ("Failed sendto (%s)\n", strerror(saved_errno)));
                        return -1;
                }
                break;
index 87624d69bbaa5718d9e1186e0f50224bae27048f..7e33990b61517d86c1991481f99f6c34d2379538 100644 (file)
@@ -136,6 +136,7 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                struct ip6_hdr ip6;
                struct tcphdr tcp;
        } ip6pkt;
+       int saved_errno;
 
        switch (src->ip.sin_family) {
        case AF_INET:
@@ -178,10 +179,13 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                        return -1;
                }
 
-               ret = sendto(s, &ip4pkt, sizeof(ip4pkt), 0, &dest->ip, sizeof(dest->ip));
+               ret = sendto(s, &ip4pkt, sizeof(ip4pkt), 0,
+                            &dest->ip, sizeof(dest->ip));
+               saved_errno = errno;
                close(s);
                if (ret != sizeof(ip4pkt)) {
-                       DEBUG(DEBUG_CRIT,(__location__ " failed sendto (%s)\n", strerror(errno)));
+                       DEBUG(DEBUG_ERR,
+                             ("Failed sendto (%s)\n", strerror(saved_errno)));
                        return -1;
                }
                break;
@@ -220,12 +224,15 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                tmpport = tmpdest->ip6.sin6_port;
 
                tmpdest->ip6.sin6_port = 0;
-               ret = sendto(s, &ip6pkt, sizeof(ip6pkt), 0, &dest->ip6, sizeof(dest->ip6));
+               ret = sendto(s, &ip6pkt, sizeof(ip6pkt), 0,
+                            &dest->ip6, sizeof(dest->ip6));
+               saved_errno = errno;
                tmpdest->ip6.sin6_port = tmpport;
                close(s);
 
                if (ret != sizeof(ip6pkt)) {
-                       DEBUG(DEBUG_CRIT,(__location__ " failed sendto (%s)\n", strerror(errno)));
+                       DEBUG(DEBUG_ERR,
+                             ("Failed sendto (%s)\n", strerror(saved_errno)));
                        return -1;
                }
                break;
index a036011faee1ab50d81f78715f4b9182ceaf21f2..3647de9be7c4b9bc731d3440694724c3a5c9fbb7 100644 (file)
@@ -344,6 +344,7 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                struct ip6_hdr ip6;
                struct tcphdr tcp;
        } ip6pkt;
+       int saved_errno;
 
        switch (src->ip.sin_family) {
        case AF_INET:
@@ -389,9 +390,11 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                ret = sendto(s, &ip4pkt, sizeof(ip4pkt), 0,
                             (const struct sockaddr *)&dest->ip,
                             sizeof(dest->ip));
+               saved_errno = errno;
                close(s);
                if (ret != sizeof(ip4pkt)) {
-                       DEBUG(DEBUG_CRIT,(__location__ " failed sendto (%s)\n", strerror(errno)));
+                       DEBUG(DEBUG_ERR,
+                             ("Failed sendto (%s)\n", strerror(saved_errno)));
                        return -1;
                }
                break;
@@ -433,11 +436,13 @@ int ctdb_sys_send_tcp(const ctdb_sock_addr *dest,
                ret = sendto(s, &ip6pkt, sizeof(ip6pkt), 0,
                             (const struct sockaddr *)&dest->ip6,
                             sizeof(dest->ip6));
+               saved_errno = errno;
                tmpdest->ip6.sin6_port = tmpport;
                close(s);
 
                if (ret != sizeof(ip6pkt)) {
-                       DEBUG(DEBUG_CRIT,(__location__ " failed sendto (%s)\n", strerror(errno)));
+                       DEBUG(DEBUG_ERR,
+                             ("Failed sendto (%s)\n", strerror(saved_errno)));
                        return -1;
                }
                break;