On Friday 04 January 2013, Daniel Lescohier wrote:
> I entered a bug on the thread-safety of the time conversion caches
> in server/util_time.c and modules/loggers/mod_log_config.c.
> 
> In brief, they're not thread-safe because:
> 
>    1. The algorithm depends on total memory ordering, and both the
> volatile qualifier and memory barriers are not used.
>    2. The algorithm is subject to the "ABA problem."

I agree that the lack of memory barriers is a problem.

And it ABA problem would not exist if callers of ap_recent_* would 
actually check that the time *is* recent (as written in the docs in 
util_time.h). This is not a problem for the error log, because it 
always uses apr_time_now(). But the request time in mod_log_config may 
be further in the past.

Out of interest, have you seen the function give wrong results in 
practice?

> The details of the problem are here:
> 
> https://issues.apache.org/bugzilla/show_bug.cgi?id=54363
> 
> I included in the bug not-yet-tested patches with a different
> algorithm.
> 
> Do other people agree that the existing algorithm have the problems
> explained in detail in the bug?

I haven't reviewed your patches in detail, yet. One thing: 
apr_atomic_read should be enough, you don't need apr_atomic_cas with 
the same value.

Cheers,
Stefan

Reply via email to