:A first cut of the libc-based implementation, using a (new) syscall to
:get/set the signal its is available, and can be found here:
:http://www.gsicomp.on.ca/~matt/dfly/ (rev3, bottom of page)
:
:Note that this implementation is not complete, as it is missing the userland
:get/set_mcontext code.  I'm sure I've also missed some nuance wrt signal
:handling (locking, ordering, etc) in the design and use of the new sigmask
:syscall.
:
:--
:Matt Emmerton

    Ok, I see a few things, all easy to fix:

    * sigpend is not swapped in and out.  This is the bitmask of pending
      signals.  It stays as it is.

    * sigmask must be adjusted by the kernel to remove unmaskable signals
      using SIG_CANTMASK(sigmask);

    * There is a naming conflict between the sigmask() system call and 
      thethe 'sigmask' identifier, but (see next item)...

    * You shouldn't need a new system call anyway, the sigprocmask() system
      call can be used to retrieve and set the signal mask.  I recommend
      using that.

    There is one more issue, and that is an atomicy issue.  We want the
    new signal mask to be set simultaniously with the restoration of the
    context (or most of it).  This means that all signals must be masked
    temporarily while restoring the context.  But don't worry about it,
    I can handle that part as well.  It does mean an extra system call
    but that isn't our concern at the moment.

    I can fill in the missing code assembly, no problem.  If you do one
    more rev using sigprocmask() instead of creating a new system call
    I can then take it from there.

                                        -Matt
                                        Matthew Dillon 
                                        <[EMAIL PROTECTED]>

Reply via email to