On Sat, Jan 13, 2007 at 11:59:09PM -0800, Matthew Dillon wrote: > dillon 2007/01/13 23:59:09 PST > > DragonFly src repository > > Modified files: > sys/kern kern_sig.c kern_synch.c > sys/machine/pc32/i386 machdep.c > sys/machine/vkernel/i386 cpu_regs.c fork_tramp.s trap.c > sys/machine/vkernel/include globaldata.h md_var.h > sys/machine/vkernel/platform systimer.c > sys/sys proc.h signal.h signalvar.h > sys/vm vm_vmspace.c > Log: > Implement a new signal delivery mechanism, SA_MAILBOX. If specified the > sigaction structure's sa_mailbox pointer (field is unioned with sa_handler) > points to a location in user memory. When the signal occurs, the location > is overwritten with the signal number and the next system call made (or > the current one running) will return EINTR. NO SIGNAL STATE IS PUSHED, > NO SIGNAL VECTOR IS DISPATCHED. This makes mailbox signaling very fast. > > Userland can interlock against the mailbox simply by polling and clearing > the mailbox prior to doing a system call. The mailbox signal will be > properly interlocked against the system call. Userland does not need to > make any other system calls (no sigblock() or sigsetmask() calls) to > properly interlock delivery. The kernel interrupts at most one system call > per signal delivered via this mechanism, even if the userland does not > clear the mailbox.
What happens if a second signal gets delivered to the process before the first signal is checked by the userland process? -- La prueba más fehaciente de que existe vida inteligente en otros planetas, es que no han intentado contactar con nosotros.
