Null references redux
Jeremie Pelletier
jeremiep at gmail.com
Sun Sep 27 14:31:44 PDT 2009
Andrei Alexandrescu wrote:
> Jeremie Pelletier wrote:
>>> Is this Linux specific? what about other *nix systems, like BSD and
>>> solaris?
>>
>> Signal handler are standard to most *nix platforms since they're part
>> of the posix C standard libraries, maybe some platforms will require a
>> special handling but nothing impossible to do.
>
> Let me write a message on behalf of Sean Kelly. He wrote that to Walter
> and myself this morning, then I suggested him to post it but probably he
> is off email for a short while. Hopefully the community will find a
> solution to the issue he's raising. Let me post this:
>
> ===================
> Sean Kelly wrote:
>
> There's one minor problem with his code. It's not safe to throw an
> exception from a signal handler. Here's a quote from the POSIX spec at
> opengroup.org:
>
> "In order to prevent errors arising from interrupting non-reentrant
> function calls, applications should protect calls to these functions
> either by blocking the appropriate signals or through the use of some
> programmatic semaphore (see semget() , sem_init() , sem_open() , and so
> on). Note in particular that even the "safe" functions may modify errno;
> the signal-catching function, if not executing as an independent thread,
> may want to save and restore its value. Naturally, the same principles
> apply to the reentrancy of application routines and asynchronous data
> access. Note thatlongjmp() and siglongjmp() are not in the list of
> reentrant functions. This is because the code executing after longjmp()
> and siglongjmp() can call any unsafe functions with the same danger as
> calling those unsafe functions directly from the signal handler.
> Applications that use longjmp() andsiglongjmp() from within signal
> handlers require rigorous protection in order to be portable."
>
> If this were an acceptable approach it would have been in druntime ages
> ago :-)
> ===================
>
>
>
> Andrei
Yes but the segfault signal handler is not made to design code that can
live with these exceptions, its just a feature to allow segfaults to be
sent to the crash handler to get a backtrace dump. Even on windows while
you can recover from access violations, its generally a bad idea to
allow for bugs to be turned into features.
Jeremie
More information about the Digitalmars-d
mailing list