On 13 February 2014 23:40, Stefan Fuhrmann <stefan.fuhrm...@wandisco.com> wrote:
> On Thu, Feb 13, 2014 at 7:55 PM, Ivan Zhakov <i...@visualsvn.com> wrote:
>>
>> On 13 February 2014 22:24,  <stef...@apache.org> wrote:
>> > Author: stefan2
>> > Date: Thu Feb 13 18:24:17 2014
>> > New Revision: 1567996
>> >
>> > URL: http://svn.apache.org/r1567996
>
>
>>
>> > +/* Count a hit in ENTRY within CACHE.
>>
>> > + */
>> > +static void
>> > +increment_hit_counters(svn_membuffer_t *cache, entry_t *entry)
>> > +{
>> > +  /* To minimize the memory footprint of the cache index, we limit
>> > local
>> > +   * hit counters to 32 bits.  These may overflow and we must make sure
>> > that
>> > +   * the global sums are still (roughly due to races) the sum of all
>> > local
>> > +   * counters. */
>> > +  if (++entry->hit_count == 0)
>> > +    cache->hit_count -= APR_UINT32_MAX;
>> > +  else
>> > +    cache->hit_count++;
>> > +
>> As far I understand this counters are updated from several threads
>> without mutex?
>
>
> That is correct.
>
>>
>> In that case we have to use atomic functions to
>> increment them, otherwise we may skip hit_count == 0 in some cases.
>
>
> No.

> Assuming that the system does not split 32 bit read nor write operation
I really, really don't like such assumptions in Subversion code. APR
and OS already provides functions for proper inter process
manipulations and we must use them, instead of saving several cycles.


-- 
Ivan Zhakov
CTO | VisualSVN | http://www.visualsvn.com

Reply via email to