Hi,
the problem really was a ref-counting bug and it was in BoolBinopNode. This
Cython code
a or b
generated the following C code:
/*
* a or b # <<<<<<<<<<<<<<
*/
/* __pyx_t_1 allocated */
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_a); if (unlikely(__pyx_t_1 <
0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno =
__LINE__; goto __pyx_L1_error;}
if (!__pyx_t_1) {
/* __pyx_t_1 released */
/* __pyx_t_2 allocated */
__pyx_t_2 = __pyx_v_b;
} else {
__pyx_t_2 = __pyx_v_a;
}
Py_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* __pyx_t_2 released */
So there's a deadly DECREF at the end. The fix is that __pyx_t_2 must
receive an owned reference in both cases. Fixed now, and lxml builds and
runs like a charm. :)
I also added a test for the 'or' operator that nicely crashes before
applying the fix.
Stefan
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev