From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Mark Dilger <mark(dot)dilger(at)enterprisedb(dot)com> |
Cc: | Robert Haas <robertmhaas(at)gmail(dot)com>, Peter Geoghegan <pg(at)bowt(dot)ie>, "Andrey M(dot) Borodin" <x4mmm(at)yandex-team(dot)ru>, Stephen Frost <sfrost(at)snowman(dot)net>, Michael Paquier <michael(at)paquier(dot)xyz>, Amul Sul <sulamul(at)gmail(dot)com>, Dilip Kumar <dilipbalaut(at)gmail(dot)com>, Andres Freund <andres(at)anarazel(dot)de>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: new heapcheck contrib module |
Date: | 2020-10-23 01:41:15 |
Message-ID: | 113947.1603417275@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
I wrote:
> So now I think this is a REDIRECT on either architecture, but the
> offset and length fields have different values, causing the redirect
> pointer to point to different places. Maybe it happens to point
> at a DEAD tuple in the big-endian case.
Just to make sure, I tried this test program:
#include <stdio.h>
#include <string.h>
typedef struct ItemIdData
{
unsigned lp_off:15, /* offset to tuple (from start of page) */
lp_flags:2, /* state of line pointer, see below */
lp_len:15; /* byte length of tuple */
} ItemIdData;
int main()
{
ItemIdData lp;
memset(&lp, 0x77, sizeof(lp));
printf("off = %x, flags = %x, len = %x\n",
lp.lp_off, lp.lp_flags, lp.lp_len);
return 0;
}
I get
off = 7777, flags = 2, len = 3bbb
on a little-endian machine, and
off = 3bbb, flags = 2, len = 7777
on big-endian. It'd be less symmetric if the bytes weren't
all the same ...
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2020-10-23 01:46:19 | Re: new heapcheck contrib module |
Previous Message | Andy Fan | 2020-10-23 01:31:57 | Would it be helpful for share the patch merge result from cfbot |