aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-02-21 18:49:54 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-02-21 18:49:54 +0000
commitfc8e6c7746ad309b7b57989358a949a387bb14c4 (patch)
treee30fe031d4b9f67cd2d77640d477f5436fea8624
parent393f313227fba2b7905cfbd69b3e4c18d762bf4f (diff)
downloadpostgresql-fc8e6c7746ad309b7b57989358a949a387bb14c4.tar.gz
postgresql-fc8e6c7746ad309b7b57989358a949a387bb14c4.zip
Oops, commited a test version of this file by accident. Revert.
-rw-r--r--src/backend/storage/buffer/bufmgr.c17
-rw-r--r--src/backend/utils/adt/network.c115
2 files changed, 73 insertions, 59 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index f5d61323310..d1bcf40923c 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.74 2000/02/21 18:47:03 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.75 2000/02/21 18:49:00 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -453,7 +453,6 @@ BufferAlloc(Relation reln,
*/
Assert(buf->refcount == 0);
buf->refcount = 1;
- Assert(PrivateRefCount[BufferDescriptorGetBuffer(buf) - 1] == 0);
PrivateRefCount[BufferDescriptorGetBuffer(buf) - 1] = 1;
if (buf->flags & BM_DIRTY)
@@ -543,7 +542,6 @@ BufferAlloc(Relation reln,
inProgress = FALSE;
buf->flags &= ~BM_IO_IN_PROGRESS;
TerminateBufferIO(buf);
- Assert(PrivateRefCount[BufferDescriptorGetBuffer(buf)-1] == 1);
PrivateRefCount[BufferDescriptorGetBuffer(buf) - 1] = 0;
buf->refcount--;
buf = (BufferDesc *) NULL;
@@ -570,7 +568,6 @@ BufferAlloc(Relation reln,
{
TerminateBufferIO(buf);
/* give up the buffer since we don't need it any more */
- Assert(PrivateRefCount[BufferDescriptorGetBuffer(buf)-1] == 1);
PrivateRefCount[BufferDescriptorGetBuffer(buf) - 1] = 0;
Assert(buf->refcount > 0);
buf->refcount--;
@@ -1472,16 +1469,8 @@ ReleaseRelationBuffers(Relation rel)
if (!(buf->flags & BM_FREE))
{
/* Assert checks that buffer will actually get freed! */
- Assert(buf->refcount == 1);
- if (PrivateRefCount[i - 1] <= 0)
- {
- fprintf(stderr, "Nonpositive PrivateRefCount on buffer for %s\n",
- RelationGetRelationName(rel));
- fflush(stderr);
- * ((char *) 0) = 0;
- abort();
- }
- Assert(PrivateRefCount[i - 1] == 1);
+ Assert(PrivateRefCount[i - 1] == 1 &&
+ buf->refcount == 1);
/* ReleaseBuffer expects we do not hold the lock at entry */
SpinRelease(BufMgrLock);
holding = false;
diff --git a/src/backend/utils/adt/network.c b/src/backend/utils/adt/network.c
index 44045c184b5..d1173aeccf7 100644
--- a/src/backend/utils/adt/network.c
+++ b/src/backend/utils/adt/network.c
@@ -3,23 +3,22 @@
* is for IP V4 CIDR notation, but prepared for V6: just
* add the necessary bits where the comments indicate.
*
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/network.c,v 1.17 2000/02/21 18:47:07 tgl Exp $
- *
+ * $Id: network.c,v 1.18 2000/02/21 18:49:54 tgl Exp $
* Jon Postel RIP 16 Oct 1998
*/
-#include "postgres.h"
-
#include <sys/types.h>
#include <sys/socket.h>
+
#include <errno.h>
+
#include <netinet/in.h>
#include <arpa/inet.h>
+#include "postgres.h"
#include "utils/builtins.h"
-
-static int v4bitncmp(unsigned long a1, unsigned long a2, int bits);
+static int v4bitncmp(unsigned int a1, unsigned int a2, int bits);
/*
* Access macros. Add IPV6 support.
@@ -40,7 +39,6 @@ static int v4bitncmp(unsigned long a1, unsigned long a2, int bits);
#define ip_v4addr(inetptr) \
(((inet_struct *)VARDATA(inetptr))->addr.ipv4_addr)
-
/* Common input routine */
static inet *
network_in(char *src, int type)
@@ -129,8 +127,7 @@ cidr_out(inet *src)
}
/*
- * Boolean tests for ordering operators --- must agree with sorting
- * operator network_cmp().
+ * Boolean tests for magnitude. Add V4/V6 testing!
*/
bool
@@ -138,7 +135,19 @@ network_lt(inet *a1, inet *a2)
{
if (!PointerIsValid(a1) || !PointerIsValid(a2))
return FALSE;
- return (bool) (network_cmp(a1, a2) < 0);
+ if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
+ {
+ int order = v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2));
+
+ return ((order < 0) || ((order == 0) && (ip_bits(a1) < ip_bits(a2))));
+ }
+ else
+ {
+ /* Go for an IPV6 address here, before faulting out: */
+ elog(ERROR, "cannot compare address families %d and %d",
+ ip_family(a1), ip_family(a2));
+ return FALSE;
+ }
}
bool
@@ -146,7 +155,7 @@ network_le(inet *a1, inet *a2)
{
if (!PointerIsValid(a1) || !PointerIsValid(a2))
return FALSE;
- return (bool) (network_cmp(a1, a2) <= 0);
+ return (network_lt(a1, a2) || network_eq(a1, a2));
}
bool
@@ -154,7 +163,18 @@ network_eq(inet *a1, inet *a2)
{
if (!PointerIsValid(a1) || !PointerIsValid(a2))
return FALSE;
- return (bool) (network_cmp(a1, a2) == 0);
+ if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
+ {
+ return ((ip_bits(a1) == ip_bits(a2))
+ && (v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a1)) == 0));
+ }
+ else
+ {
+ /* Go for an IPV6 address here, before faulting out: */
+ elog(ERROR, "cannot compare address families %d and %d",
+ ip_family(a1), ip_family(a2));
+ return FALSE;
+ }
}
bool
@@ -162,7 +182,7 @@ network_ge(inet *a1, inet *a2)
{
if (!PointerIsValid(a1) || !PointerIsValid(a2))
return FALSE;
- return (bool) (network_cmp(a1, a2) >= 0);
+ return (network_gt(a1, a2) || network_eq(a1, a2));
}
bool
@@ -170,45 +190,30 @@ network_gt(inet *a1, inet *a2)
{
if (!PointerIsValid(a1) || !PointerIsValid(a2))
return FALSE;
- return (bool) (network_cmp(a1, a2) > 0);
-}
-
-bool
-network_ne(inet *a1, inet *a2)
-{
- if (!PointerIsValid(a1) || !PointerIsValid(a2))
- return FALSE;
- return (bool) (network_cmp(a1, a2) != 0);
-}
-
-/*
- * Comparison function for sorting. Add V4/V6 testing!
- */
-
-int4
-network_cmp(inet *a1, inet *a2)
-{
if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET))
{
- int order = v4bitncmp(ip_v4addr(a1), ip_v4addr(a2),
- (ip_bits(a1) < ip_bits(a2)) ?
- ip_bits(a1) : ip_bits(a2));
-
- if (order)
- return order;
- /* They agree in the first N bits, so shorter one comes first */
- return (int) ip_bits(a1) - (int) ip_bits(a2);
+ int order = v4bitncmp(ip_v4addr(a1), ip_v4addr(a2), ip_bits(a2));
+
+ return ((order > 0) || ((order == 0) && (ip_bits(a1) > ip_bits(a2))));
}
else
{
/* Go for an IPV6 address here, before faulting out: */
elog(ERROR, "cannot compare address families %d and %d",
ip_family(a1), ip_family(a2));
- return 0;
+ return FALSE;
}
}
bool
+network_ne(inet *a1, inet *a2)
+{
+ if (!PointerIsValid(a1) || !PointerIsValid(a2))
+ return FALSE;
+ return (!network_eq(a1, a2));
+}
+
+bool
network_sub(inet *a1, inet *a2)
{
if (!PointerIsValid(a1) || !PointerIsValid(a2))
@@ -288,6 +293,28 @@ network_supeq(inet *a1, inet *a2)
}
}
+/*
+ * Comparison function for sorting. Add V4/V6 testing!
+ */
+
+int4
+network_cmp(inet *a1, inet *a2)
+{
+ if (ntohl(ip_v4addr(a1)) < ntohl(ip_v4addr(a2)))
+ return (-1);
+
+ if (ntohl(ip_v4addr(a1)) > ntohl(ip_v4addr(a2)))
+ return (1);
+
+ if (ip_bits(a1) < ip_bits(a2))
+ return (-1);
+
+ if (ip_bits(a1) > ip_bits(a2))
+ return (1);
+
+ return 0;
+}
+
text *
network_host(inet *ip)
{
@@ -449,7 +476,7 @@ network_netmask(inet *ip)
*/
static int
-v4bitncmp(unsigned long a1, unsigned long a2, int bits)
+v4bitncmp(unsigned int a1, unsigned int a2, int bits)
{
unsigned long mask = 0;
int i;
@@ -458,11 +485,9 @@ v4bitncmp(unsigned long a1, unsigned long a2, int bits)
mask = (mask >> 1) | 0x80000000;
a1 = ntohl(a1);
a2 = ntohl(a2);
- a1 &= mask;
- a2 &= mask;
- if (a1 < a2)
+ if ((a1 & mask) < (a2 & mask))
return (-1);
- else if (a1 > a2)
+ else if ((a1 & mask) > (a2 & mask))
return (1);
return (0);
}