Re: pl/python do not delete function arguments
От | Jan Urbański |
---|---|
Тема | Re: pl/python do not delete function arguments |
Дата | |
Msg-id | 4D599AEE.7090406@wulczer.org обсуждение исходный текст |
Ответ на | Re: pl/python do not delete function arguments (Peter Eisentraut <peter_e@gmx.net>) |
Ответы |
Re: pl/python do not delete function arguments
|
Список | pgsql-hackers |
On 14/02/11 21:06, Peter Eisentraut wrote: > On ons, 2011-02-09 at 10:02 +0100, Jan Urbański wrote: >> On 09/02/11 04:52, Hitoshi Harada wrote: >>> 2010/12/31 Jan Urbański <wulczer@wulczer.org>: >>>> (continuing the flurry of patches) >>>> >>>> Here's a patch that stops PL/Python from removing the function's >>>> arguments from its globals dict after calling it. It's >>>> an incremental patch on top of the plpython-refactor patch sent in >>>> http://archives.postgresql.org/message-id/4D135170.3080705@wulczer.org. >>>> >>>> Git branch for this patch: >>>> https://github.com/wulczer/postgres/tree/dont-remove-arguments >>>> >>>> Apart from being useless, as the whole dict is unreffed and thus freed >>>> in PLy_procedure_delete, removing args actively breaks things for >>>> recursive invocation of the same function. The recursive callee after >>>> returning will remove the args from globals, and subsequent access to >>>> the arguments in the caller will cause a NameError (see new regression >>>> test in patch). >>> >>> I've reviewed this. The patch is old enough to be rejected by patch >>> command, but I manged to apply it by hand. >>> It compiles clean. Added tests pass. >>> I created fibonacci function similar to recursion_test in the patch >>> and confirmed the recursion raises error on 9.0 but not on 9.1. >>> Doc is not with the patch since this change is to remove unnecessary >>> optimization internally. >>> >>> "Ready for Committer" >> >> Thanks, >> >> patch merged with HEAD attached. > > Curiously, without the patch the recursion_test(4) call fails but > recursion_test(5) passes. Anyone know why? Damn, I remember that bug and thought I fixed it. I think calls with even numbers passed and calls with odd numbers failed... I'll try to see if a merge error did not introduce that bug back. > Btw., I get a KeyError, not a NameError as you say above. Will look into that too. Cheers, Jan
В списке pgsql-hackers по дате отправления: