httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Yann Ylavic <>
Subject Re: How to wait on a global lock with timeout
Date Wed, 25 Mar 2015 08:56:44 GMT
Hi Micha,

thanks for the review.

On Wed, Mar 25, 2015 at 7:19 AM, Micha Lenk <> wrote:
> I only had time to review the code changes. I looked at the
> implementation of apr_global_mutex_timedlock(). There I noticed that, if
> APR_HAS_THREADS, you are doing 3 timed operations without checking the
> remaining time. If all operations take almost the given timeout, this
> can in the end result in almost 3 times the allowed value.

The new _timedlocked() functions all take a third parameter (called
absolute) which tells whether the given timeout is absolute (1) or
relative (0).
This is because some native implementations use an absolute time, and
others a relative one, hence we do the conversion in the
implementations when needed only.
In apr_global_mutex_timedlock(), if the given timeout is relative, we
force it to an absolute one and call apr_thread_mutex_timedlock() (if
needed) and apr_proc_mutex_timedlock() accordingly, hence the timeout
is assured globally.

> To mitigate that design flaw I would provide the timeout by reference
> and update it by the functions using it. This has also the nice benefit
> that the caller is able to retrieve the time it needed to wait.

By doing so, you have to get the current time (call apr_time_now())
each time, and I wanted to avoid it when the native functions don't
need it.
The remaining time is not important if you can pass an absolute time (IMHO).


View raw message