Re: pltcl.so patch - Mailing list pgsql-hackers

From Nigel J. Andrews
Subject Re: pltcl.so patch
Date
Msg-id Pine.LNX.4.21.0209250730200.20523-100000@ponder.fairway2k.co.uk
Whole thread Raw
In response to Re: pltcl.so patch  (Neil Conway <neilc@samurai.com>)
Responses Re: pltcl.so patch
List pgsql-hackers
On 25 Sep 2002, Neil Conway wrote:

> "Nigel J. Andrews" <nandrews@investsystems.co.uk> writes:
> > Yes, I do get the similar results.
> > 
> > A quick investigation shows that the SPI_freetuptable at the end of
> > pltcl_SPI_exec is trying to free a tuptable of value 0x82ebe64
> > (which looks sensible to me) but which has a memory context of
> > 0x7f7f7f7f (the unallocated marker).
> 
> Attached is a patch against CVS HEAD which fixes this, I believe. The
> problem appears to be the newly added free of the tuptable at the end
> of pltcl_SPI_exec(). I've added a comment to that effect:
> 
>     /*
>      * Do *NOT* free the tuptable here. That's because if the loop
>      * body executed any SQL statements, it will have already free'd
>      * the tuptable itself, so freeing it twice is not wise. We could
>      * get around this by making a copy of SPI_tuptable->vals and
>      * feeding that to pltcl_set_tuple_values above, but that would
>      * still leak memory (the palloc'ed copy would only be free'd on
>      * context reset).
>      */

That's certainly where the fault was happening. However, that's where the
original memory leak problem was coming from (without the SPI_freetuptable
call). It could be I got that fix wrong and the extra calls you've added are
the right fix for that. I'll take a look to see what I can learn later.

> At least, I *think* that's the problem -- I've only been looking at
> the code for about 20 minutes, so I may be wrong. In any case, this
> makes both memleak() and memleak(1) work on my machine. Let me know if
> it works for you, and/or if someone knows of a better solution.

I'll have to check later.

> 
> I also added some SPI_freetuptable() calls in some places where Nigel
> didn't, and added some paranoia when dealing with statically sized
> buffers (snprintf() rather than sprintf(), and so on). I also didn't
> include Nigel's changes to some apparently unrelated PL/Python stuff
> -- this patch includes only the PL/Tcl changes.

I dare say the plpython needs to be checked by someone who knows how to since I
can well imagine the same nested call fault will exist there.


-- 
Nigel J. Andrews



pgsql-hackers by date:

Previous
From: "Shridhar Daithankar"
Date:
Subject: Re: Postgresql Automatic vacuum
Next
From: Hannu Krosing
Date:
Subject: Re: DROP COLUMN misbehaviour with multiple inheritance