
Hi Emil, On 12/6/2010 11:45 PM, Emil Dotchevski wrote:
On Mon, Dec 6, 2010 at 3:10 PM, Edd Dawson<lists@mr-edd.co.uk> wrote:
Looking again at the JPEG code here. As far as I can tell setjmp/longjmp have been used with appropriate care, but I worry what will happen if a method on a Device throws an exception, for example. I've had both Visual C++ 2008 and Apple's g++ 4.0.1 crash on me in this kind of situation.
Did you use -fexceptions with GCC, and if I'm not mistaken MSVC also has an option to assume that C functions don't throw exceptions, which shouldn't be used for exceptions to work.
I suspect that -fexceptions was not in play but it's conceivable that our build system adds it automatically when compiling C. I'll double check when I'm at work tomorrow.
In my code, I attempt to store an exception by doing something akin to boost::current_exception(), then longjmp out to a safe point before re-throwing it.
Probably boost::copy_exception would be a more appropriate call in this case.
Well, this was inside a catch(...) as I have to handle arbitrary exceptions as best as possible. But perhaps the GIL imposes a requirement on the set of exceptions that may be thrown by a device? Again, I don't know a whole lot about the wider library yet. Kind regards, Edd