X-Recipient: archive-cygwin@delorie.com
X-Spam-Check-By: sourceware.org
Date: Tue, 27 Mar 2012 22:50:50 +0200
From: Corinna Vinschen <corinna-cygwin@cygwin.com>
To: cygwin@cygwin.com
Subject: Re: clock_getres(CLOCK_REALTIME, .) may return an outdated and too high resolution
Message-ID: <20120327205050.GB25716@calimero.vinschen.de>
Reply-To: cygwin@cygwin.com
Mail-Followup-To: cygwin@cygwin.com
References: <4F6A5D42.3030108@t-online.de> <20120322093340.GW18032@calimero.vinschen.de> <4F6B65A7.9080605@t-online.de> <20120326085159.GJ2425@calimero.vinschen.de> <4F70A0C9.5060208@t-online.de> <20120327091051.GB30721@calimero.vinschen.de> <4F72007D.6080503@t-online.de> <20120327182823.GV30721@calimero.vinschen.de> <4F720E19.5000809@t-online.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
In-Reply-To: <4F720E19.5000809@t-online.de>
User-Agent: Mutt/1.5.21 (2010-09-15)
Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm
Precedence: bulk
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie.com@cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe@cygwin.com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin@cygwin.com>
List-Help: <mailto:cygwin-help@cygwin.com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner@cygwin.com
Mail-Followup-To: cygwin@cygwin.com
Delivered-To: mailing list cygwin@cygwin.com

On Mar 27 20:59, Christian Franke wrote:
> Corinna Vinschen wrote:
> >On Mar 27 20:01, Christian Franke wrote:
> >>Corinna Vinschen wrote:
> >>>On Mar 26 19:00, Christian Franke wrote:
> >>>>Corinna Vinschen wrote:
> >>>>>I see your point, but what bugs me a bit is the fact that
> >>>>>clock_getres(CLOCK_REALTIME) and clock_setres(CLOCK_REALTIME) will
> >>>>>always return the same value coarsest, regardless what value has been set.
> >>>>If clock_setres was called and succeeded, then clock_getres(.)
> >>>>should return the value set before.
> >>>>
> >>>>If clock_setres was not called, the coarsest value is IMO the only
> >>>>value that can be guaranteed.
> >>>>
> >>>>The actual value returned by NtQueryTimerResolution is simply
> >>>>useless in this context: It is the minimum of all resolutions
> >>>>currently set by all running processes. It may change at any time.
> >>>>There is apparently no way the query the current setting of the
> >>>>current process.
> >>>Uh, right, I misunderstood.  I reverted the change to clock_setres.
> >>Sorry, I probably forgot to mention that NtSetTimerResolution
> >>returns the same useless actual value than NtQueryTimerResolution.
> >>
> >>I would suggest:
> >>
> >>     status = NtSetTimerResolution (period, TRUE,&actual);
> >>     if (!NT_SUCCESS (status))
> >>       { ... return -1; }
> >>  -  minperiod = actual;
> >>  +  minperiod = period;
> >But that's not right.  The "actual" value is not useless, but the value
> >the resolution has actually been set to.
> 
> No, again this is the minimum of all resolutions currently set by
> all processes.
> 
> 
> >   The OS just doesn't support
> >arbitrary values for the period.
> >
> 
> Yes - but in 'actual' a smaller value than the value set for the
> current process may be returned.

Hmpf, ok.  Boy is that ugly.  Is there a chance that actual is bigger
than period?  In that case we should perhaps set minperiod like this:

  minperiod = MAX (actual, period);


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

