diff -ru2 a/src/backend/utils/adt/network.c b/src/backend/utils/adt/network.c --- a/src/backend/utils/adt/network.c 2011-12-01 22:47:20.000000000 +0100 +++ b/src/backend/utils/adt/network.c 2011-12-12 07:41:50.672405741 +0100 @@ -461,5 +461,9 @@ inet *a2 = PG_GETARG_INET_P(1); - PG_RETURN_INT32(network_cmp_internal(a1, a2)); + int32 r = network_cmp_internal(a1, a2); + + PG_FREE_IF_COPY(a1, 0); + PG_FREE_IF_COPY(a2, 1); + PG_RETURN_INT32(r); } @@ -473,5 +477,9 @@ inet *a2 = PG_GETARG_INET_P(1); - PG_RETURN_BOOL(network_cmp_internal(a1, a2) < 0); + bool r = network_cmp_internal(a1, a2) < 0; + + PG_FREE_IF_COPY(a1, 0); + PG_FREE_IF_COPY(a2, 1); + PG_RETURN_BOOL(r); } @@ -482,5 +490,9 @@ inet *a2 = PG_GETARG_INET_P(1); - PG_RETURN_BOOL(network_cmp_internal(a1, a2) <= 0); + bool r = network_cmp_internal(a1, a2) <= 0; + + PG_FREE_IF_COPY(a1, 0); + PG_FREE_IF_COPY(a2, 1); + PG_RETURN_BOOL(r); } @@ -491,5 +503,9 @@ inet *a2 = PG_GETARG_INET_P(1); - PG_RETURN_BOOL(network_cmp_internal(a1, a2) == 0); + bool r = network_cmp_internal(a1, a2) == 0; + + PG_FREE_IF_COPY(a1, 0); + PG_FREE_IF_COPY(a2, 1); + PG_RETURN_BOOL(r); } @@ -500,5 +516,9 @@ inet *a2 = PG_GETARG_INET_P(1); - PG_RETURN_BOOL(network_cmp_internal(a1, a2) >= 0); + bool r = network_cmp_internal(a1, a2) >= 0; + + PG_FREE_IF_COPY(a1, 0); + PG_FREE_IF_COPY(a2, 1); + PG_RETURN_BOOL(r); } @@ -509,5 +529,9 @@ inet *a2 = PG_GETARG_INET_P(1); - PG_RETURN_BOOL(network_cmp_internal(a1, a2) > 0); + bool r = network_cmp_internal(a1, a2) > 0; + + PG_FREE_IF_COPY(a1, 0); + PG_FREE_IF_COPY(a2, 1); + PG_RETURN_BOOL(r); } @@ -518,5 +542,9 @@ inet *a2 = PG_GETARG_INET_P(1); - PG_RETURN_BOOL(network_cmp_internal(a1, a2) != 0); + bool r = network_cmp_internal(a1, a2) != 0; + + PG_FREE_IF_COPY(a1, 0); + PG_FREE_IF_COPY(a2, 1); + PG_RETURN_BOOL(r); } @@ -542,12 +570,15 @@ inet *a1 = PG_GETARG_INET_P(0); inet *a2 = PG_GETARG_INET_P(1); + bool r = false; if (ip_family(a1) == ip_family(a2)) { - PG_RETURN_BOOL(ip_bits(a1) > ip_bits(a2) - && bitncmp(ip_addr(a1), ip_addr(a2), ip_bits(a2)) == 0); + r = ip_bits(a1) > ip_bits(a2) + && bitncmp(ip_addr(a1), ip_addr(a2), ip_bits(a2)) == 0; } - PG_RETURN_BOOL(false); + PG_FREE_IF_COPY(a1, 0); + PG_FREE_IF_COPY(a2, 1); + PG_RETURN_BOOL(r); } @@ -557,12 +588,15 @@ inet *a1 = PG_GETARG_INET_P(0); inet *a2 = PG_GETARG_INET_P(1); + bool r = false; if (ip_family(a1) == ip_family(a2)) { - PG_RETURN_BOOL(ip_bits(a1) >= ip_bits(a2) - && bitncmp(ip_addr(a1), ip_addr(a2), ip_bits(a2)) == 0); + r = ip_bits(a1) >= ip_bits(a2) + && bitncmp(ip_addr(a1), ip_addr(a2), ip_bits(a2)) == 0; } - PG_RETURN_BOOL(false); + PG_FREE_IF_COPY(a1, 0); + PG_FREE_IF_COPY(a2, 1); + PG_RETURN_BOOL(r); } @@ -572,12 +606,15 @@ inet *a1 = PG_GETARG_INET_P(0); inet *a2 = PG_GETARG_INET_P(1); + bool r = false; if (ip_family(a1) == ip_family(a2)) { - PG_RETURN_BOOL(ip_bits(a1) < ip_bits(a2) - && bitncmp(ip_addr(a1), ip_addr(a2), ip_bits(a1)) == 0); + r = ip_bits(a1) < ip_bits(a2) + && bitncmp(ip_addr(a1), ip_addr(a2), ip_bits(a1)) == 0; } - PG_RETURN_BOOL(false); + PG_FREE_IF_COPY(a1, 0); + PG_FREE_IF_COPY(a2, 1); + PG_RETURN_BOOL(r); } @@ -587,12 +624,15 @@ inet *a1 = PG_GETARG_INET_P(0); inet *a2 = PG_GETARG_INET_P(1); + bool r = false; if (ip_family(a1) == ip_family(a2)) { - PG_RETURN_BOOL(ip_bits(a1) <= ip_bits(a2) - && bitncmp(ip_addr(a1), ip_addr(a2), ip_bits(a1)) == 0); + r = ip_bits(a1) <= ip_bits(a2) + && bitncmp(ip_addr(a1), ip_addr(a2), ip_bits(a1)) == 0; } - PG_RETURN_BOOL(false); + PG_FREE_IF_COPY(a1, 0); + PG_FREE_IF_COPY(a2, 1); + PG_RETURN_BOOL(r); }