Unix Technical Forum

Re: [PATCHES] Win32 CHECK_FOR_INTERRUPTS() performance

This is a discussion on Re: [PATCHES] Win32 CHECK_FOR_INTERRUPTS() performance within the pgsql Hackers forums, part of the PostgreSQL category; --> > > In the spirit of incremental improvement ... I've taken Magnus' > > version and added the proposed ...


Go Back   Unix Technical Forum > Database Server Software > PostgreSQL > pgsql Hackers

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-11-2008, 07:23 AM
Magnus Hagander
 
Posts: n/a
Default Re: [PATCHES] Win32 CHECK_FOR_INTERRUPTS() performance

> > 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

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

http://archives.postgresql.org

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 12:08 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
www.UnixAdminTalk.com