Null references redux

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Sep 27 13:30:42 PDT 2009


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



More information about the Digitalmars-d mailing list