On Mon, 24 Oct 2005, Tom Lane wrote:
> Qingqing Zhou <zhouqq@cs.toronto.edu> writes:
> > I tried to persuade myself that removing all WaitForSingleObjectEx() is
> > safe ... the thing is we will false alarm EINTR as Magnus said (details to
> > repeat it are list below in case).
>
> Just to repeat myself: there were false alarms before. The interleaving
> you describe could equally well happen if a new signal is sent just
> after the old code executes WaitForSingleObjectEx and sees that a
> previous signal is waiting for it. Both old and new signals can be
> cleared by the recipient before the second signal sender gets as far as
> setting the event.
>
Oh, yeah. Just write the detailed case down for the sake of memory:
-- For previous code -- false alarm case --
1. I am killing you signal A: enter_crit; set signal bit; leave_crit;
2. He *has killed* you signal B:
3. You CHECK_FOR_INTERRUPTS(): enter_crit; sig(A); sig(B); ResetEvent(); leave_crit;
4. I finish my killing: SetEvent();
Now the event is signaled but the signal is handled already.
Regards,
Qingqing