Reproposed F19 Feature: Fix Network Name Resolution [Was: DualstackNetworking]

Pedro Alves palves at redhat.com
Thu Jan 24 14:04:46 UTC 2013


On 01/23/2013 07:31 PM, John Reiser wrote:
> On 01/23/2013 10:35 AM, Dan Williams wrote:
>> On Wed, 2013-01-23 at 09:48 -0800, John Reiser wrote:
> 
>>> The signal handler can write a packet into a pipe from the process to itself,
>>> and that can be hooked up to an event loop API.
> 
>> Clearly.  But then you have to deal with signal handling and all the
>> things you're not able to do from a signal handler like allocate memory,
>> figure out any locking that may be required, and deal with signal
>> handler re-entrancy.  

(...)

This is known as the self-pipe trick.  Doing a web search for that
term will find lots of advice on how to use it properly.

> This is exactly what the signal+pipe scheme facilitates;
> you get to write a couple dozen lines of straight-line code.
> The main loop gets notified that the pipe has a packet,
> then calls the NM callback.  All the NM callback has to do is
> read the fixed-length packet from the pipe, unwrap the answer,
> and feed it to the client's callback.

Right.  The issue with signal based interfaces is that
they're fundamentally bad for multi-threading and
libraries -- signal dispositions/handlers are global per
process, not per thread.  If two different libraries loaded
into a process want to use/reserve the same signal (which also
steals a signal from the main program), you're
in trouble.  See this 4 blog series about exactly this issue
around wait/SIGCHLD in Qt/glib for example:

http://www.macieira.org/blog/2012/07/forkfd-part-4-proposed-solutions/

-- 
Pedro Alves



More information about the devel mailing list