Thank you! Glad to see that the report was useful.

On Fri, Dec 9, 2016 at 9:33 PM, Tom Lane <t...@sss.pgh.pa.us> wrote:

> I wrote:
> > Rafa de la Torre <rto...@carto.com> writes:
> >>              exc = PyErr_NewException(exception_map[i].name, base,
> dict);
> >> +            Py_INCREF(exc);
> >>              PyModule_AddObject(mod, exception_map[i].classname, exc);
>
> > Hm.  Seems like if this is a problem, the code for the other three
> > exceptions is being a bit careless: it does do Py_INCREFs on them,
> > but not soon enough to ensure no problems.  Also, I wonder why that
> > code checks for a null result from PyErr_NewException but this doesn't.
>
> > Good catch though.  A naive person would have assumed that
> > PyModule_AddObject would increment the object's refcount, but
> > the Python docs say "This steals a reference to value", which
> > I guess must mean that the caller is required to do it.
>
> For me (testing with Python 2.6.6 on RHEL6), this test case didn't result
> in a server crash, but in the wrong exception object name being reported.
> Tracing through it showed that a python GC was happening during the loop
> adding all the exceptions to the spiexceptions module, so that some of the
> exception objects went away and then were immediately reallocated as other
> exception objects.  The explicit gc call in the test case wasn't
> necessary, because the problem happened before that.  Fun fun.
>
> I've pushed a patch that deals with all these problems.  Thanks for
> the report!
>
>                         regards, tom lane
>



-- 
Rafa de la Torre
rto...@carto.com

Reply via email to