Re: [PATCHES] Win32 CHECK_FOR_INTERRUPTS() performance

From: "Magnus Hagander" <mha(at)sollentuna(dot)net>
To: "Qingqing Zhou" <zhouqq(at)cs(dot)toronto(dot)edu>, "Tom Lane" <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: <pgsql-hackers(at)postgresql(dot)org>, "Merlin Moncure" <merlin(dot)moncure(at)rcsonline(dot)com>, "Andrew Dunstan" <andrew(at)dunslane(dot)net>
Subject: Re: [PATCHES] Win32 CHECK_FOR_INTERRUPTS() performance
Date: 2005-10-23 20:34:10
Message-ID: 6BCB9D8A16AC4241919521715F4D8BCE92E793@algol.sollentuna.se
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> > In the spirit of incremental improvement ... I've taken Magnus'
> > version and added the proposed change to re-enable
> Qingqing's patch by
> > skipping WaitForSingleObjectEx altogether in the
> CHECK_FOR_INTERRUPTS code path.
> > I also removed WaitForSingleObjectEx in
> pgwin32_poll_signals(), which
> > AFAICS should be just like CHECK_FOR_INTERRUPTS. I think
> this is what
> > we are proposing to actually apply to 8.1beta4. I can't test it
> > though, so please check it over...
> >
> Questions:
>
> Are we asserting that
>
> UNBLOCKED_SIGNAL_QUEUE() != 0
> then
> WaitForSingleObjectEx(0)==WAIT_OBJECT_0
>
> If so, we can put this assertion in. Seems there is some
> race. In pg_queue_signal(), we do it like this:
>
> enter_critical_section();
> mask the signal;
> leave_critical_section();
> SetEvent();
>
> That is, we may detect the value first before we got event.
> So at least the above assertion is not correct. This may
> cause other problems, just for a quick feedback.

Actually, wasn't the latest that we *only* use the event object in order
to "break out" of blocking operations in the socket code? And only use
checking + checking in critical seciton to deliver? In this case, it
shouldn't matter when the event is set as long as it's always set
*after* we update the values.

Meaning that we'd have for the check just:
UNBLOCKED_SIGNAL_QUEUE()
enter_critical_section()
UNBLOCKE_DSIGNAL_QUEUE() again
leave_critical_section()

and when we use the event to break out, tha'ts just a WFSO before that
whole cycle runs.

(Don't have the code around right now, and it's getting a bit late after
a long day, so forgive me if I'm missing something obvious in that
reasoning :P)

//Magnus

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2005-10-23 20:41:14 Re: [PATCHES] Win32 CHECK_FOR_INTERRUPTS() performance
Previous Message Qingqing Zhou 2005-10-23 20:33:06 Re: [PATCHES] Win32 CHECK_FOR_INTERRUPTS() performance