Perhaps a direct call to Py_Finalize() inside gui_exit() would help ?
On 6/27/08, Johannes Wienke <[EMAIL PROTECTED]> wrote:
> Hi,
>
> Am 06/27/2008 05:55 PM schrieb Robert Bradshaw:
>
> > On Jun 27, 2008, at 6:43 AM, Johannes Wienke wrote:
>
> >> I've got the following problem:
> >> There is client code of my application that is already written and
> >> cotains so lines of code like these ones:
> >>
> >> void foo(int c) {
> >>
> >> if (c < 5) {
> >> gui_exit(1)
> >> }
> >>
> >> // do some other things that fail if c is < 5
> >>
> >> }
> >>
> >> I am the one who has to implement gui_exit, which was originally a
> >> wrapper for the normal C exit function doing some clean up.
> >>
> >> My first attempt to implement gui_exit in cython was using sys.exit.
> >> The problem with this approach is that sys.exit depends on exceptions,
> >> which are only checked after the client routine is completely
> >> processed. So foo does not exit at gui_exit and possibly generates a
> >> segmentation fault in the other things it does.
> >>
> >> Is there a solution for this problem, that uses the python exit
> >> mechanism? I need that to clean up resources.
> >
>
> > Try
> >
> >
> > void foo(int c) {
> >
> > if (c < 5) {
> > gui_exit(1)
> > }
> >
> > else {
> >
> > // do some other things that fail if c is < 5
> >
> > }
> >
> > }
>
>
> I can't change the client code. The original sematics of gui_exit was
> that it terminates the programm at that point, so I have to preserve
> this functionality in my implementation of gui_exit.
>
>
> > Also, look at the exception passing mechanisms at
> >
> http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/version/Doc/Manual/basics.html#mozTocId482761
>
>
> Well, the problem I see here, is that the caller of gui_exit is not a
> python function, but a real C function in a shared library I call.
>
>
> Johannes
>
>
> _______________________________________________
> Cython-dev mailing list
> [email protected]
> http://codespeak.net/mailman/listinfo/cython-dev
>
>
>
--
Lisandro Dalcín
---------------
Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
PTLC - Güemes 3450, (3000) Santa Fe, Argentina
Tel/Fax: +54-(0)342-451.1594
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev