Skip to content
  • David Xu's avatar
    1. Change prototype of trapsignal and sendsig to use ksiginfo_t *, most · 9104847f
    David Xu authored
       changes in MD code are trivial, before this change, trapsignal and
       sendsig use discrete parameters, now they uses member fields of
       ksiginfo_t structure. For sendsig, this change allows us to pass
       POSIX realtime signal value to user code.
    
    2. Remove cpu_thread_siginfo, it is no longer needed because we now always
       generate ksiginfo_t data and feed it to libpthread.
    
    3. Add p_sigqueue to proc structure to hold shared signals which were
       blocked by all threads in the proc.
    
    4. Add td_sigqueue to thread structure to hold all signals delivered to
       thread.
    
    5. i386 and amd64 now return POSIX standard si_code, other arches will
       be fixed.
    
    6. In this sigqueue implementation, pending signal set is kept as before,
       an extra siginfo list holds additional siginfo_t data for signals.
       kernel code uses psignal() still behavior as before, it won't be failed
       even under memory pressure, only exception is when deleting a signal,
       we should call sigqueue_delete to remove signal from sigqueue but
       not SIGDELSET. Current there is no kernel code will deliver a signal
       with additional data, so kernel should be as stable as before,
       a ksiginfo can carry more information, for example, allow signal to
       be delivered but throw away siginfo data if memory is not enough.
       SIGKILL and SIGSTOP have fast path in sigqueue_add, because they can
       not be caught or masked.
       The sigqueue() syscall allows user code to queue a signal to target
       process, if resource is unavailable, EAGAIN will be returned as
       specification said.
       Just before thread exits, signal queue memory will be freed by
       sigqueue_flush.
       Current, all signals are allowed to be queued, not only realtime signals.
    
    Earlier patch reviewed by: jhb, deischen
    Tested on: i386, amd64
    9104847f