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);
 }
 
