Mailing Lists: Apple Mailing Lists
Image of Mac OS face in stamp
Re: Catching signal errors
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Catching signal errors

circa 2/8/05 1:31 PM, "Rick Steele" <email@hidden> wrote:

>> In any case, the list of things one may do in a signal handler is so
>> restricted that I would not attempt to generalize it up to the C++ level
>> anyway. As soon as any destructor does anything as simple as call delete, Bad
>> ThingsĀ are likely to break loose from the ceiling and rain down around your
>> ears.
> Does this mean that a hard drive and remote network systems could blow up, or
> that the computer freeze could occur?

Depends on what kind of code you're writing, but in general if you are
talking about signal handlers then you are talking about userland code, and
so the worst likely consequence would be that your own program would
misbehave in some way catastrophic to its own operation (dereference a wild
pointer [and thus crash], enter an endless loop [and thus freeze], etc.).
But anything is possible; your program might well become confused and write
garbage into its own data files before blowing up. Depends on the program.

>> As a general rule, callback functions available to C programmers should never
>> allow C++ exceptions to escape.
> I don't really understand this last sentence. How would a C callback let an
> C++ exception handler "escape".

Various APIs, such as the signal handling APIs, are expressed in terms of C.
C++ will allow you to call C APIs, which includes passing the addresses of
callback functions declared as part of those APIs, but even though a
callback may be invoked as if it were a C function, if it is written in C++
then it is a C++ function. The caller doesn't know this, and isn't prepared
to handle C++ exceptions which may be thrown by the callback. Consequently,
a C callback written in C++ must catch all exceptions. (I often toss them
into a queue for later analysis and reporting.)


    Pete Gontier

Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

Visit the Apple Store online or at retail locations.

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2011 Apple Inc. All rights reserved.