Il 16/05/2012 21:16, Erik Faye-Lund ha scritto: > From: theoleblond <theodore.lebl...@gmail.com> > > SwitchToThread() only gives away the rest of the current time > slice to another thread in the current process. So if the > thread that feeds the file decscriptor we're polling is not > in the current process, we get busy-waiting. This can lead > to very poor performance in some cases, so we better just > wait a tiny amount instead. > > * lib/poll.c: use SleepEx(1, TRUE) instead of SwitchToThread() > --- > > Here's a patch we've applied to Git for Windows. Perhaps it's > useful upstream as well? > > I'm forwarding it on behalf of Theodore, who was nice enough > to debug a performance issue and nail down a fix. Thanks, > Theodore! > > ChangeLog | 13 +++++++++++++ > lib/poll.c | 3 ++- > 2 files changed, 15 insertions(+), 1 deletion(-) > > diff --git a/ChangeLog b/ChangeLog > index aeb3cf8..b94c311 100644 > --- a/ChangeLog > +++ b/ChangeLog > @@ -1,3 +1,16 @@ > +2012-05-16 theoleblond <theodore.lebl...@gmail.com> > + > + poll: prevent busy-waiting > + > + SwitchToThread() only gives away the rest of the current time > + slice to another thread in the current process. So if the > + thread that feeds the file decscriptor we're polling is not > + in the current process, we get busy-waiting. This can lead > + to very poor performance in some cases, so we better just > + wait a tiny amount instead. > + > + * lib/poll.c: use SleepEx(1, TRUE) instead of SwitchToThread() > + > 2012-05-15 Pádraig Brady <p...@draigbrady.com> > > fsusage: fix block size returned on older Linux 2.6 > diff --git a/lib/poll.c b/lib/poll.c > index 3071b12..235338e 100644 > --- a/lib/poll.c > +++ b/lib/poll.c > @@ -598,7 +598,8 @@ restart: > > if (!rc && timeout == INFTIM) > { > - SwitchToThread(); > + /* Sleep 1 millisecond to avoid busy wait */ > + SleepEx(1, TRUE); > goto restart; > } >
Looks good, do you have commit access? Paolo