From: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
To: Steve Deiters <SteveDeiters@domain.hid>
Cc: xenomai@xenomai.org
Subject: Re: [Xenomai-help] Timed waits with POSIX skin using CLOCK_REALTIME
Date: Wed, 14 Jul 2010 01:25:28 +0200 [thread overview]
Message-ID: <4C3CF5E8.7040709@domain.hid> (raw)
In-Reply-To: <181804936ABC2349BE503168465576460F48EB4B@exchserver.basler.com>
Steve Deiters wrote:
>> -----Original Message-----
>> From: Gilles Chanteperdrix [mailto:gilles.chanteperdrix@xenomai.org]
>> Sent: Tuesday, July 13, 2010 5:17 PM
>> To: Steve Deiters
>> Cc: xenomai@xenomai.org
>> Subject: Re: [Xenomai-help] Timed waits with POSIX skin using
>> CLOCK_REALTIME
>>
>> Steve Deiters wrote:
>>> This is probably more of a general POSIX programming
>> question. Some
>>> of the timed wait routines in POSIX (pthread_mutex_timedlock, etc)
>>> take an absolute timeout value in terms of CLOCK_REALTIME.
>> How then
>>> are these routines not subject to timing error when the
>> CLOCK_REALTIME
>>> is changed, e.g. with clock_settime?
>> I am not sure I understand the question. We tried and
>> implement what is described for instance here:
>>
>> http://www.opengroup.org/onlinepubs/009695399/functions/clock_
>> settime.html
>>
>> --
>> Gilles.
>>
>
> It is not a question of the implementation, but more so of the
> specification.
>
> For example, if I do something similar to the following:
>
> clock_gettime(CLOCK_REALTIME, &tv); /* Point A */
> tv.tv_sec += 5;
> pthread_mutex_timedlock(&mutex, &tv); /* Point B */
>
> And somewhere else in the sytem after point A but before point B returns
> the time is changed:
>
> clock_settime(CLOCK_REALTIME, &new_time);
>
> If the new_time differs from the original time by a significant amount
> then point B will either return ETIMEDOUT if the time was set forward,
> or block for a potentially long period if the time was set backward.
>
> This behavior seems to be indicated in the following paragraph from the
> specification:
>
> "If the value of the CLOCK_REALTIME clock is set via clock_settime(),
> the new value of the clock shall be used to determine the time of
> expiration for absolute time services based upon the CLOCK_REALTIME
> clock. This applies to the time at which armed absolute timers expire.
> If the absolute time requested at the invocation of such a time service
> is before the new value of the clock, the time service shall expire
> immediately as if the clock had reached the requested time normally."
Yes.
>
>
> I'm not actually having any problems with this, as I am not using these
> routines. I just thought it was a curious contrast compared to e.g.
> rt_mutex_acquire which specifies a relative timeout. I don't understand
> how the POSIX timed services expect to have consistent timing using
> absolute timeout values if they are not based at least on
> CLOCK_MONOTONIC which cannot be set.
We only implemented the thing, we did not write the specification.
Most POSIX calls use absolute CLOCK_REALTIME timeouts,
pthread_cond_timedait allow to choose either CLOCK_REALTIME or
CLOCK_MONOTONIC, the clock and timers functions allow any type of
timeout, and the "old" services such as select and nanosleep use
relative timeouts.
I am sure in each of these services, separately, the choice was made for
valid reasons. But on the whole, it looks a bit inconsistent.
The advantage of absolute timeouts is that they allow easy restarting of
syscalls when they are interrupted by signals. And in fact, the native
API also provides for absolute timeouts with the *_until set of services
(such as rt_mutex_acquire_until).
Allowing to use the CLOCK_MONOTONIC instead of CLOCK_REALTIME is in fact
equivalent to allowing relative timeouts. So, adding some more clock
attributes for mutex, semaphores and message queues would in fact allow
the user to choose, which seems to be the best solution.
--
Gilles.
prev parent reply other threads:[~2010-07-13 23:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-13 21:56 [Xenomai-help] Timed waits with POSIX skin using CLOCK_REALTIME Steve Deiters
2010-07-13 22:16 ` Gilles Chanteperdrix
2010-07-13 22:49 ` Steve Deiters
2010-07-13 23:25 ` Gilles Chanteperdrix [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C3CF5E8.7040709@domain.hid \
--to=gilles.chanteperdrix@xenomai.org \
--cc=SteveDeiters@domain.hid \
--cc=xenomai@xenomai.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.