On 04/05/2017 13:15, Stefan Hajnoczi wrote:
> On Thu, Apr 20, 2017 at 02:00:42PM +0200, Paolo Bonzini wrote:
>> void bdrv_disable_copy_on_read(BlockDriverState *bs)
>> {
>> - assert(bs->copy_on_read > 0);
>> - bs->copy_on_read--;
>> + assert(atomic_read(&bs->copy_on_read) > 0);
>> + atomic_dec(&bs->copy_on_read);
>> }
>
> To make this truly thread-safe:
>
> old = atomic_dec_fetch(&bs->copy_on_read);
> assert(old > 0);
Good point. It feels wrong to assert after the fact, but then so does
making the assertion not quite thread safe.
Paolo