On 26/03/2013 18:51, Holger Joukl wrote:

Hi,

I'm wrapping a C++ library that's actually just a thin wrapper around a C
lib.

Through a dispatch() method of a Dispatcher class there's an invocation of
callbacks which get implemented on the Python side, by subclassing callback
classes exposed through Boost.Python.

Now, for performing the actual dispatch the C++ library calls into the
underlying C library.

This hasn't been a problem so far as we've been targetting Solaris using
Sun/Oracle studio
compilers.

However, on Linux compiled with GCC, if an exception gets raised in the
Python callback the
program segfaults. Obviously the C part of the vendor library has not been
compiled with
(GCC-) exception support for Linux.

Unfortunately this isn't under my control and the library provider seems
not to be willing
to make the library robust against exceptions in user callback code.

So I need to keep the Boost C++ exception that "signals" the Python
exception from passing
through the C parts.

How does the library handle callbacks? An event loop in a separate thread? Do you have to explicitly call some blocking function to run the event loop? If it's a C lib likely the callbacks are just function pointers. Being called inside a C object I'd say you assumption is correct: no C++ exceptions to be raised inside callbacks (the lib is gcc-compiled, it has no knowledge of exceptions). If you could recompile with g++ the exception would raise from the event loop, unless catched while calling the callback function pointer.

Sidenote: how does the C++ exception mechanism work under the hood? What happens if it's called inside a C compiled function?

--
            Giuseppe Corbelli
WASP Software Engineer, Copan Italia S.p.A
Phone: +390303666318  Fax: +390302659932
E-mail: giuseppe.corbe...@copanitalia.com
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to