OK, I have a way to debug this.

Add to palloc and pfree a printf like:

	printf("palloc: %d\n", mem);
	printf("pfree : %d\n", mem);

The printf's should go after the memory is allocated in palloc, and
before it is free'ed in pfree().

and then run the backend and issue the query causing the problem, and
grab the lines from the postmaster log file.  Check the last pfree
value, because that is the one that is crashing it.  Check the list to
see if it has been palloc'ed.  If it has, was it pfree'ed by someone
else, and who palloc'ed it.  If it is not on the list, figure out how it
got on to the palloc list.

-- 
Bruce Momjian                          |  830 Blythe Avenue
maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

Thu, 10 Sep 1998 15:13:27 -0400 (EDT)
Bruce Momjian <maillist@candle.pha.pa.us>
pg_user crash
Bruce Momjian wrote:
> 
> OK, I have a way to debug this.
> 
> Add to palloc and pfree a printf like:
> 
>         printf("palloc: %d\n", mem);
>         printf("pfree : %d\n", mem);
> 
> The printf's should go after the memory is allocated in palloc, and
> before it is free'ed in pfree().
> 
> and then run the backend and issue the query causing the problem, and
> grab the lines from the postmaster log file.  Check the last pfree
> value, because that is the one that is crashing it.  Check the list to
> see if it has been palloc'ed.  If it has, was it pfree'ed by someone
> else, and who palloc'ed it.  If it is not on the list, figure out how it
> got on to the palloc list.

Crash comes from AllocSetReset()->AllocSetFree() - printf in
pfree will not help.

I would suggest to add printf to AllocSetFree()/AllocSetAlloc()...

Vadim

Fri, 11 Sep 1998 09:27:59 +0800
Vadim Mikheev <vadim@krs.ru>
Re: [HACKERS] pg_user crash