Re: signal dequeue ...

george anzinger (george@mvista.com)
Fri, 22 Jun 2001 13:31:02 -0700


Davide Libenzi wrote:
>
> On 22-Jun-2001 george anzinger wrote:
> > Davide Libenzi wrote:
> >>
> >> I'm just trying to figure out the reason why signal must be delivered one at
> >> a
> >> time instead of building a frame with multiple calls with only the last one
> >> chaining back to the kernel.
> >> All previous calls instead of calling the stub that jump back to the kernel
> >> will call a small stub like ( Ix86 ) :
> >>
> >> stkclean_stub:
> >> add $frame_size, %esp
> >> cmp %esp, $end_stubs
> >> jae $sigreturn_stub
> >> ret
> >> sigreturn_stub:
> >> mov __NR_sigreturn, %eax
> >> int $0x80
> >> end_stubs:
> >>
> >> ...
> >> | context1
> >> * $stkclean_stub
> >> * sigh1_eip
> >> | context0
> >> * $stkclean_stub
> >> * sigh0_eip
> >>
> >> When sigh0 return, it'll call stkclean_stub that will clean context0 and if
> >> we're at the end it'll call the jump-back-to-kernel stub, otherwise the
> >> it'll
> >> execute the ret the will call sigh1 handler ... and so on.
> >>
> > And if the user handler does a long_jmp?
>
> But if the user handler does a long_jump even the old stub will be missed,
> isn't it ?

Right, but the remaining signals are still pending. In your method, the
kernel doesn't know which were and which were not actually delivered.

George
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/