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