Adding attribute to buffer description in PostgreSQL source, now has spinlock error?

235 views Asked by At

I would like to add an attribute to the buffer description in the PostgreSQL source code, but when I try to initialize it I get an error of: PANIC: stuck spinlock (0x7fc1cddd0cd0) detected at freelist.c:206

The struct is described in buf_internals.h as:

typedef struct sbufdesc
{
BufferTag   tag;            /* ID of page contained in buffer */

BufFlags    flags;          /* see bit definitions above */
uint16      usage_count;    /* usage counter for clock sweep code */
unsigned    refcount;       /* # of backends holding pins on buffer */
int         wait_backend_pid;       /* backend PID of pin-count waiter */
int         buf_age;  //<<<<<<<<<<< The age of the buffer

slock_t     buf_hdr_lock;   /* protects the above fields */

int         buf_id;         /* buffer's index number (from 0) */
int         freeNext;       /* link in freelist chain */

LWLockId    io_in_progress_lock;    /* to wait for I/O to complete */
LWLockId    content_lock;   /* to lock access to buffer contents */
} BufferDesc;

but it gets stuck at line 206 of freelist.c, which is just:

        LockBufHdr(buf);

All I've added was an int to the struct and set it to zero in the same place all the other buffers are initialized. How could this cause a spinlock error?

1

There are 1 answers

0
nicholas.reichel On

It looks like running make clean first has corrected the issue.