On (08/20/19 11:23), Petr Mladek wrote:
> > is no risk of the descriptor unexpectedly being determined as
> > valid due to dataring head overflowing/wrapping.
> 
> Please, provide more details about the solved race. Is it because
> some reader could have reference to an invalid (reused) descriptor?
> Can be these invalid descriptors be member of the list?

As far as I understand, such descriptors can be on the list:

        prb_reserve()
                assign_desc()
                        // pick a new never used descr
                        i = atomic_fetch_inc(&rb->desc_next_unused);
                        d = &rb->descs[i]
                        dataring_desc_init(&d->desc);
                        return d
                buf = dataring_push()
                        // the oldest data is reserved, but not commited
                        ret = get_new_lpos()
                        if (ret)
                                dataring_desc_init()
                                return NULL
                if (!buf)
                        numlist_push()

_datablock_valid() has a "desc->begin_lpos == desc->next_lpos" check.

        -ss

Reply via email to